`
tenderuser
  • 浏览: 61363 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

TextFileNameInputFormat

阅读更多
以前写过一个,不过没做笔记,过段时间就忘了,还是放在这里把。。。。 功能很简单,就是从不同的文件中读文本中的每一行,然后将文件名作为key,将文件中的每一行作为key,recordReader基本上就是从LineRecordReader处copy过来的。。 一点技术含量木有。。。 而且还很乱。。   
/**
 * 
 */
package ledkk.util;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.FileInputFormat;
import org.apache.hadoop.mapred.FileSplit;
import org.apache.hadoop.mapred.InputSplit;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.RecordReader;
import org.apache.hadoop.mapred.Reporter;
import org.apache.hadoop.util.LineReader;

/**
 * @author ledkk
 *
 */
public class TextFileNameInputFormat extends FileInputFormat<Text, Text> {


	/* (non-Javadoc)
	 * @see org.apache.hadoop.mapred.lib.CombineFileInputFormat#getRecordReader(org.apache.hadoop.mapred.InputSplit, org.apache.hadoop.mapred.JobConf, org.apache.hadoop.mapred.Reporter)
	 */
	@Override
	public RecordReader<Text, Text> getRecordReader(
			InputSplit arg0, JobConf arg1,
			Reporter arg2) throws IOException {
		return new TextFileNameRecordReader(arg0, arg1, arg2);
	}
	
	
	public static class TextFileNameRecordReader implements RecordReader<Text, Text>{
		
		FileSplit split;
		JobConf conf;
		Reporter reporter;
		LineReader dis;
		
		 long start;
		 long pos;
		 long end;
			
		public TextFileNameRecordReader(InputSplit s , JobConf conf , Reporter reporter) throws IOException{
			this.split = (FileSplit) s;
			this.conf = conf;
			this.reporter = reporter;
			
			start = split.getStart();
		    end = start + split.getLength();
		    final Path file = split.getPath();
		    FileSystem fs = file.getFileSystem(conf);
		    FSDataInputStream fileIn = fs.open(split.getPath());
		    dis = new LineReader(fileIn, conf);
		    this.pos = start;
		}

		/* (non-Javadoc)
		 * @see org.apache.hadoop.mapred.RecordReader#next(java.lang.Object, java.lang.Object)
		 */
		@Override
		public synchronized  boolean next(Text key, Text value) throws IOException {
			Path f = split.getPath();
			String fileName = f.getName();
			 while (pos < end) {
			      key.set(fileName);

			      int newSize = dis.readLine(value, Integer.MAX_VALUE,
			                                Math.max((int)Math.min(Integer.MAX_VALUE, end-pos),
			                                		Integer.MAX_VALUE));
			      if (newSize == 0) {
			        return false;
			      }
			      pos += newSize;
			      if (newSize < Integer.MAX_VALUE) {
			        return true;
			      }

			      LOG.info("Skipped line of size " + newSize + " at pos " + (pos - newSize));
		    }
			 return false;
			
		}

		/* (non-Javadoc)
		 * @see org.apache.hadoop.mapred.RecordReader#createKey()
		 */
		@Override
		public Text createKey() {
			return new Text();
		}

		/* (non-Javadoc)
		 * @see org.apache.hadoop.mapred.RecordReader#createValue()
		 */
		@Override
		public Text createValue() {
			return new Text();
		}

		/* (non-Javadoc)
		 * @see org.apache.hadoop.mapred.RecordReader#getPos()
		 */
		@Override
		public long getPos() throws IOException {
			return pos;
		}

		/* (non-Javadoc)
		 * @see org.apache.hadoop.mapred.RecordReader#close()
		 */
		@Override
		public void close() throws IOException {
			if(dis!=null){
				dis.close();
			}
		}

		/* (non-Javadoc)
		 * @see org.apache.hadoop.mapred.RecordReader#getProgress()
		 */
		@Override
		public float getProgress() throws IOException {
			return 0;
		}
		
	}
	
}



分享到:
评论

相关推荐

    采用s函数编写的永磁同步电机矢量控制双闭环PMSM控制模型,利用matlab simulink搭建,可修改参数,增减负载均能恢复参考值正常运行

    采用s函数编写的永磁同步电机矢量控制双闭环PMSM控制模型,利用matlab simulink搭建,可修改参数,增减负载均能恢复参考值正常运行。

    微博热搜数据可视化分析系统技术框架python + flask web + mysql

    ===如资源质量问题,可半价退款,代下全网资源,价格公道==== 微博热搜数据可视化分析系统 技术框架 python + flask web + mysql 角色介绍 管理员 admin 123456 模块分析 可视化模块 趋势模块(折线图) 热搜模块(云词图) 分析模块 情感分析模块 (因为舆情分析包含了情感分析我们为了区分两者的区别在舆情模块中包含了中文分词jiba功能) 影响分析模块 (影响分析我们根据数据库中的数据来分析,主要做两部获取数据库中最大的热度标题,jiba分词获取出现频率最大的热搜,和最小的热搜) 舆情分析模块 (单独的使用snow就行因为舆情分析包含了情感分析) 学院模块 邮箱模块 (在学院模块中如果舆情值低于0.3发送邮箱到指定的邮箱中) 爬虫模块 (页面上有一个爬虫按钮,当用户点击以后它爬出一次热搜的数据并添加到数据库中) 学院模块 (爬虫专门爬虫学校贴吧信息,然后如果舆情值低于多少使用邮箱通知管理员) 密码重置模块 数据库WBAnalysis。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    引体向上和俯卧撑的自动感知计数原理

    引体向上和俯卧撑的自动感知计数原理

    springboot263校园组团平台.zip

    springboot263校园组团平台

    springboot+vue的桂林旅游网站系统-1e9t9f02.zip

    springboot+vue的桂林旅游网站系统_1e9t9f02.zip

    Scrapy是一个用于Python的快速高级网页抓取框架.zip

    python

    springboot239华府便利店信息管理系统.zip

    springboot239华府便利店信息管理系统

    springboot180基于spring boot的医院挂号就诊系统.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    T型逆变器仿真(SPWM)Matlab2021a 加设LCL滤波器,三相负载为纯阻性, 采用SPWM,正弦波作为调制波 逆变器输出线电压为五电平波形,滤波后电压电流为对称三相电

    T型逆变器仿真(SPWM)Matlab2021a 加设LCL滤波器,三相负载为纯阻性, 采用SPWM,正弦波作为调制波。 逆变器输出线电压为五电平波形,滤波后电压电流为对称三相电。

    springboot115城镇保障性住房管理系统.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    springboot298计算机学院校友网.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    Vim pythonmode PyLint绳Pydoc断点从框.zip

    python

    springboot237毕业设计成绩管理系统的设计与实现.zip

    springboot237毕业设计成绩管理系统的设计与实现

    基于Activiti的低代码办公平台设计与开发:实现流程与表单自动化管理

    内容概要:本文介绍了一个基于 Activiti 流程引擎的低代码办公平台的设计与开发。该平台由低代码设计模块和基本信息模块组成,支持线上创建业务对象、表单、数据对象和流程模型等,利用 DDL语言进行数据库操作、Activiti 进行流程管理,前端使用 Bpmn-js 和 Vue.js 开发,表单和数据对象通过 JSON 存储和 Vue 的 Element UI 回显。基本信息模块则涵盖了权限管理和系统管理。测试结果显示平台功能完整,设计简便易用。 适合人群:适合中小型企业的技术人员、管理人员和其他参与办公流程设计与实施的相关人员。 使用场景及目标:平台旨在减少开发投入,降低对专业开发人才的依赖。主要适用于企业内部审批、业务流程自动化等领域,帮助优化业务流程管理,提高办公效率。 其他说明:本文展示了基于Activiti低代码办公平台的具体应用场景和技术实现细节。关键技术点涉及 Activiti 工作流、Vue.js 前端框架和 MySQL 数据库管理系统,为开发类似办公系统提供了有价值的参考和借鉴。

    springboot219基于SpringBoot的网络海鲜市场系统的设计与实现.zip

    springboot219基于SpringBoot的网络海鲜市场系统的设计与实现

    springboot112基于Spring Boot技术的卓越导师双选系统设计与实现.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    自动驾驶车道保持LKA,基于LQR算法,carsim与simulink联合仿真,包括说明书及LQR的推导过程(每一步怎么做的)

    自动驾驶车道保持LKA,基于LQR算法,carsim与simulink联合仿真,包括说明书及LQR的推导过程(每一步怎么做的)

    Python中的概率时间序列建模.zip

    python

    springboot120企业级工位管理系统.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    BES秃鹰优化算法结合GRU做多特征输入单个因变量输出的拟合预测模型 程序注释详细直接替数据可以用 程序语言为matlab,最低版本要求2020及以上

    BES秃鹰优化算法结合GRU做多特征输入单个因变量输出的拟合预测模型。 程序注释详细直接替数据可以用。 程序语言为matlab,最低版本要求2020及以上。

Global site tag (gtag.js) - Google Analytics