国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

如何拓展Hadoop的InputFormat為其他分隔符

來源:懂視網 責編:小采 時間:2020-11-09 12:59:15
文檔

如何拓展Hadoop的InputFormat為其他分隔符

如何拓展Hadoop的InputFormat為其他分隔符:在Hadoop中,常用的TextInputFormat是以換行符作為Record分隔符的。 在實際應用中,我們經常會出現一條Record中包含多行的情況,例如: doc..../doc 此時,需要拓展TextInputFormat以完成這個功能。 先來看一下原始實現: public class Tex
推薦度:
導讀如何拓展Hadoop的InputFormat為其他分隔符:在Hadoop中,常用的TextInputFormat是以換行符作為Record分隔符的。 在實際應用中,我們經常會出現一條Record中包含多行的情況,例如: doc..../doc 此時,需要拓展TextInputFormat以完成這個功能。 先來看一下原始實現: public class Tex

在Hadoop中,常用的TextInputFormat是以換行符作為Record分隔符的。 在實際應用中,我們經常會出現一條Record中包含多行的情況,例如: doc..../doc 此時,需要拓展TextInputFormat以完成這個功能。 先來看一下原始實現: public class TextInputFormat exte

在Hadoop中,常用的TextInputFormat是以換行符作為Record分隔符的。

在實際應用中,我們經常會出現一條Record中包含多行的情況,例如:


....

此時,需要拓展TextInputFormat以完成這個功能。

先來看一下原始實現:

public class TextInputFormat extends FileInputFormat {
 
 @Override
 public RecordReader
 createRecordReader(InputSplit split,
 TaskAttemptContext context) {
// By default,textinputformat.record.delimiter = ‘/n’(Set in configuration file)
 String delimiter = context.getConfiguration().get(
 "textinputformat.record.delimiter");
 byte[] recordDelimiterBytes = null;
 if (null != delimiter)
 recordDelimiterBytes = delimiter.getBytes();
 return new LineRecordReader(recordDelimiterBytes);
 }
 
 @Override
 protected boolean isSplitable(JobContext context, Path file) {
 CompressionCodec codec =
 new CompressionCodecFactory(context.getConfiguration()).getCodec(file);
 return codec == null;
 }
}

根據上面的代碼, 不難發現,換行符實際上是由”textinputformat.record.delimiter”這個配置決定的。

所以我們有種解決方案:
(1) 在Job中直接配置textinputformat.record.delimiter為”\n”,這種方案是比較Hack的,很容易影響到其他代碼的正常執行。
(2) 繼承TextInputFormat,在return LineRecordReader時,使用自定義的分隔符。

本文采用第二種方案,代碼如下:

public class DocInputFormat extends TextInputFormat {
	private static final String RECORD_DELIMITER = "\n";
	@Override
	public RecordReader createRecordReader(
	InputSplit split, TaskAttemptContext tac) {
	byte[] recordDelimiterBytes = null;
	recordDelimiterBytes = RECORD_DELIMITER.getBytes();
	return new LineRecordReader(recordDelimiterBytes);
	}
	@Override
	public boolean isSplitable(JobContext context, Path file) {
	CompressionCodec codec = new CompressionCodecFactory(
	context.getConfiguration()).getCodec(file);
	return codec == null;
	}
}

需要指出的是,InputFormat只是把原始HDFS文件分割成String的記錄,如果你的 內有其他結構化數據,那么需要在map中自己實現deserilize的相關業務邏輯來處理。

?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

如何拓展Hadoop的InputFormat為其他分隔符

如何拓展Hadoop的InputFormat為其他分隔符:在Hadoop中,常用的TextInputFormat是以換行符作為Record分隔符的。 在實際應用中,我們經常會出現一條Record中包含多行的情況,例如: doc..../doc 此時,需要拓展TextInputFormat以完成這個功能。 先來看一下原始實現: public class Tex
推薦度:
標簽: 如何 分隔 其他
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 亚洲欧美视频一区 | 国产精品高清视亚洲一区二区 | 日韩欧美激情 | 免费观看黄色网址 | 日本韩国欧美一区 | 欧美成人禁片在线观看网址 | 亚洲一级二级 | 日韩在线视频在线观看 | 亚洲 欧美 自拍 另类 欧美 | 国产片一区二区三区 | 国产精品免费观看视频播放 | 国产精品…在线观看 | 国产精品亚洲四区在线观看 | 亚洲欧美日韩中另类在线 | 欧美日韩国产另类一区二区三区 | 欧美高清一区二区三区欧美 | 国产毛片一区二区三区精品 | 久久无码av三级 | 亚洲国产精品日韩高清秒播 | 激情一区二区三区成人 | 不卡在线一区 | 国产高清美女一级毛片久久 | 日本午夜在线观看 | 免费观看的黄色网址 | 伊人精品在线视频 | 国产日韩欧美自拍 | 日韩一区二区久久久久久 | 国产激情一区二区三区成人91 | 国产毛片一级 | 一区二区三区观看 | 国产成人精品视频在放 | 亚洲一区免费视频 | 一级毛片免费网站 | www.欧美色图 | 亚洲一区二区三区在线 | 日韩欧美激情视频 | 国内精品视频一区二区三区 | 亚洲欧美日本在线观看 | 欧美中文娱乐网 | 欧美另类日韩中文色综合 | 在线观看日韩视频 |