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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hive java导入CVS

發布時間:2025/3/11 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hive java导入CVS 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文:http://bbs.chinahadoop.cn/thread-5343-1-1.html

----------------------------------------------------------------------------------

本文的目的是hive讀取cvs文件,忽略字段中‘\,’,最終還是以','來分割文本
cvs格式是以逗號','隔開的文件格式,文本中可能在字段里又包含了逗號轉義符號‘\,’
文件格式舉例:
1,2,5,(hah\,ahojg)
如果用hive自帶的分隔符建表:
create table IF NOT EXISTS test_table(p_id INT,tm INT,idate INT,url STRING)
partitioned by (dt string)
row format delimited fields terminated by ','? ?或者為 '\,'?
STORED AS INPUTFORMAT
'com.hadoop.mapred.DeprecatedLzoTextInputFormat'??
OUTPUTFORMAT??
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'?
location '/hdfs/data/incoming';
結果都會被分為:1 2 5 (hah\ ahojg)
因為hive只識別一個字符的分隔符,所以需要我們編寫自己的input/output format
下面這段代碼是網上截取的,將多個分隔符換成hive自帶的\001
想要忽略‘\,’的目的,建紅色的代碼修改如下即可:
//先將‘\,’換成'@'?,處理完逗號分隔符,再將'@'?換成 '\,'
String repalceString_01 = value.toString().replace("\\,", "@");
String repalceString_02 = repalceString_01.replace(",", "\001");
String strReplace = repalceString_02.replace("@", "\\,");

------------------------------------------------------------------------------------------------------
步驟:myeclipse中建立java工程,根目錄下新建lib目錄,添加hadoop和常用的jar包

  • 編寫自定義InputFormat(MutilCharInputFormat
  • 編寫自定義MutilCharRecordReader實現RecordReader接口,并重寫next方法
編寫自定義Input Format
01 package?com.icloud.hive;

02 import java.io.IOException;

03 import org.apache.commons.logging.Log;

04 import org.apache.commons.logging.LogFactory;

05 import org.apache.hadoop.io.LongWritable;

06 import org.apache.hadoop.io.Text;

07 import org.apache.hadoop.mapred.FileSplit;

08 import org.apache.hadoop.mapred.InputSplit;

09 import org.apache.hadoop.mapred.JobConf;

10 import org.apache.hadoop.mapred.RecordReader;

11 import org.apache.hadoop.mapred.Reporter;

12 import org.apache.hadoop.mapred.TextInputFormat;

13 ?

14 public class MutilCharInputFormat extends TextInputFormat{

15 private static final Log log = LogFactory.getLog(MutilCharRecordReader.class);

16 ?

17 @Override

18 public RecordReader<LongWritable, Text> getRecordReader(

19 InputSplit genericSplit, JobConf job, Reporter reporter)

20 throws IOException {

21 reporter.setStatus(genericSplit.toString());

22 //創建MutilCharRecordReader并返回

23 return new MutilCharRecordReader((FileSplit)genericSplit,job);

24 }

25 }




總結

以上是生活随笔為你收集整理的hive java导入CVS的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。