日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

hive指定多个字符作为列分隔符的问题说明

發(fā)布時(shí)間:2025/4/16 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hive指定多个字符作为列分隔符的问题说明 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、問(wèn)題:HDFS文件上列分隔符是##,hive建表時(shí)直接用##,發(fā)現(xiàn)輸出的字段和文件不一致。

? ? ? 建表語(yǔ)句如下:

? ? ??

ROW FORMAT DELIMITED FIELDS TERMINATED BY '##' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION'hdfs://nameservice-ha/pgw/gz'

2、原因:hive創(chuàng)建表指定分隔符時(shí),不支持多個(gè)字符作為分隔符。

? ? ?上述就只能用#,簡(jiǎn)單解決辦法就是寫個(gè)MR程序?qū)蓚€(gè)##改成一個(gè)#。


3、解決:Hive要支持多個(gè)字符作為分割符,需要自定義InputFormat.,重寫next方法。

? ? ?代碼如下:

? ??

package com.hive;import java.io.IOException;import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapred.FileSplit; import org.apache.hadoop.mapred.InputSplit; import org.apache.hadoop.mapred.JobConf; import org.apache.hadoop.mapred.JobConfigurable; import org.apache.hadoop.mapred.RecordReader; import org.apache.hadoop.mapred.Reporter; import org.apache.hadoop.mapred.TextInputFormat;public class DefTextInputFormat extends TextInputFormat implements JobConfigurable {public RecordReader<LongWritable, Text> getRecordReader(InputSplit genericSplit, JobConf job, Reporter reporter) throws IOException {reporter.setStatus(genericSplit.toString());return new DefRecordReader((FileSplit)genericSplit, job);} }

package com.hive;import java.io.IOException; import java.io.InputStream;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.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.io.compress.CompressionCodec; import org.apache.hadoop.io.compress.CompressionCodecFactory; import org.apache.hadoop.mapred.FileSplit; import org.apache.hadoop.mapred.RecordReader; import org.apache.hadoop.util.LineReader;public class DefRecordReader implements RecordReader<LongWritable, Text> {private CompressionCodecFactory compressionCodecs = null;private long start;private long pos;private long end;private LineReader lineReader;int maxLineLength;// 構(gòu)造方法public DefRecordReader(FileSplit inputSplit, Configuration job) throws IOException {maxLineLength = job.getInt("mapred.mutilCharRecordReader.maxlength",Integer.MAX_VALUE);start = inputSplit.getStart();end = start + inputSplit.getLength();final Path file = inputSplit.getPath();// 創(chuàng)建壓縮器compressionCodecs = new CompressionCodecFactory(job);final CompressionCodec codec = compressionCodecs.getCodec(file);// 打開(kāi)文件系統(tǒng)FileSystem fs = file.getFileSystem(job);FSDataInputStream fileIn = fs.open(file);boolean skipFirstLine = false;if (codec != null) {lineReader = new LineReader(codec.createInputStream(fileIn), job);end = Long.MAX_VALUE;} else {if (start != 0) {skipFirstLine = true;--start;fileIn.seek(start);}lineReader = new LineReader(fileIn, job);}if (skipFirstLine) {start += lineReader.readLine(new Text(), 0,(int) Math.min((long) Integer.MAX_VALUE, end - start));}this.pos = start;}public DefRecordReader(InputStream in, long offset, long endOffset, int maxLineLength) {this.maxLineLength = maxLineLength;this.start = offset;this.lineReader = new LineReader(in);this.pos = offset;this.end = endOffset;}public DefRecordReader(InputStream in, long offset, long endOffset, Configuration job) throws IOException {this.maxLineLength = job.getInt("mapred.mutilCharRecordReader.maxlength", Integer.MAX_VALUE);this.lineReader = new LineReader(in, job);this.start = offset;this.end = endOffset;}@Overridepublic void close() throws IOException {if (lineReader != null)lineReader.close();}@Overridepublic LongWritable createKey() {return new LongWritable();}@Overridepublic Text createValue() {return new Text();}@Overridepublic long getPos() throws IOException {return pos;}@Overridepublic float getProgress() throws IOException {if (start == end) {return 0.0f;} else {return Math.min(1.0f, (pos - start) / (float) (end - start));}}@Override//重構(gòu)next方法,處理行中字符,將多個(gè)列分割字符變成1個(gè)列分割字符public boolean next(LongWritable key, Text value) throws IOException {while (pos < end) {key.set(pos);int newSize = lineReader.readLine(value, maxLineLength,Math.max((int) Math.min(Integer.MAX_VALUE, end - pos),maxLineLength));// 把字符串中的"##"轉(zhuǎn)變?yōu)?#34;#"String strReplace = value.toString().replace("##", "#");Text txtReplace = new Text();txtReplace.set(strReplace);value.set(txtReplace.getBytes(), 0, txtReplace.getLength());if (newSize == 0)return false;pos += newSize;if (newSize < maxLineLength)return true;}return false;} }

在建表時(shí),指定com.hive.DefTextInputFormat類為INPUTFORMAT 。

當(dāng)然要先將這兩個(gè)類打包成jar部署到Hive的運(yùn)行環(huán)境中,可參考http://blog.csdn.net/fjssharpsword/article/details/70271671

總結(jié)

以上是生活随笔為你收集整理的hive指定多个字符作为列分隔符的问题说明的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美成人不卡 | 狠狠撸在线 | 五月婷婷av | 欧美日韩一区免费 | 人成网站在线观看 | 亚洲欧美日韩国产成人精品影院 | 国产精品一二区在线观看 | 在线亚洲人成电影网站色www | 欧美综合在线观看 | 亚洲涩色| 一区二区三区四区在线播放 | 女同av网站| 中文字幕亚洲一区二区三区五十路 | 国产日产欧美一区二区三区 | 日韩一区二区中文字幕 | 欧美30p | 善良的少妇伦理bd中字 | 免费看欧美成人a片无码 | 探花视频在线版播放免费观看 | 欧美极品jizzhd欧美 | 午夜激情一区 | 黄色一及片 | 日日夜夜天天 | 免费在线国产精品 | 嫩草www | 国产美女久久久久久 | 久久怡红院 | 97超碰人| 精品国产一区二区三区日日嗨 | 九九精品视频免费 | 欧美不卡在线观看 | 一本久久精品一区二区 | 国产污网站 | 四虎综合 | av55 | 免费高清av在线看 | 玖玖精品视频 | 在线观看无遮挡 | 大桥未久av一区二区三区中文 | 日少妇视频 | 欧美自拍视频 | 久久毛片网站 | 在线看麻豆 | 国产亚洲精品精品精品 | 国产成人精品影视 | 激情 小说 亚洲 图片 伦 | 日韩在线视频观看免费 | 亚洲做受高潮 | 久久久久国产一区二区三区 | 精品一区二区免费看 | 午夜影院免费体验区 | 欧美手机看片 | 国产视频69 | 中文日韩 | 成人a在线 | 国产日韩成人内射视频 | 国产日本欧美一区二区 | 精品人人妻人人澡人人爽牛牛 | 日韩国产欧美精品 | 蜜桃久久久久 | 国产三级日本三级在线播放 | 91亚洲精华| 亚洲欧美国产一区二区 | 国产精品国产成人国产三级 | 欧美色综合色 | 88av网站| 9999在线视频 | 亚洲xxxx天美 | v天堂中文在线 | 国产精品乱码一区 | 亚洲天堂手机在线观看 | 久久精品视频久久 | av性在线 | 国产成人综合亚洲 | 国产乱淫av公 | 懂色av一区二区三区在线播放 | 丰满少妇一级 | 久久传媒 | 成人综合婷婷国产精品久久 | 久久久久人妻一区精品色欧美 | 永久免费看mv网站入口亚洲 | 国产精品视频在线播放 | 黑人乱码一区二区三区av | 18禁男女爽爽爽午夜网站免费 | 卡一卡二在线视频 | 一区二区在线免费视频 | 人人人超碰 | av一片| 免费99精品国产自在在线 | 久久久久亚洲av片无码v | 天堂二区| 国产精品免费久久久 | 亚洲尹人| 欧美性猛交xxxx免费看久久久 | 91美女片黄在线观看91美女 | 国产精品高潮呻吟久久久 | 国内精品久久久久久久影视简单 | 国产激情无码一区二区 | 天天做天天爱天天操 | 亚洲精品综合精品自拍 |