2019独角兽企业重金招聘Python工程师标准>>>

1、hive读取文件机制

  • 1、使用inputformat对象来读取文件,默认是<org.apache.hadoop.mapred.TextInputFormat>。返回一行行的数据。
  • 2、使用SerDe类默认是<org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe>来对每一行数据进行字段切割,对应表中的字段。

2、问题:SerDe默认情况下只支持“单字符”切割,如果分隔符为多字符的,那么可以进行一下处理。

  • 1、使用RegexSerDe通过正则表达式来抽取字段

      create table t_bi_reg(id string,name string)row format serde 'org.apache.hadoop.hive.serde2.RegexSerDe'with serdeproperties('input.regex'='(.*)\\|\\|(.*)','output.format.string'='%1$s %2$s')stored as textfile;hive>load data local inpath '/root/hivedata/bi.dat' into table t_bi_reg;hive>select * from t_bi_reg;
    
  • 2、自定义inputFormat类来处理。

    原理:其实就是在inputformat读取数据的时候,将读出来的信息进行多字符转化为单字符,这样就可以用单字符进行切割了。

    自定义类:

      public class BiDelimiterInputFormat extends TextInputFormat {[@Override](https://my.oschina.net/u/1162528)public RecordReader<LongWritable, Text> getRecordReader(InputSplit genericSplit, JobConf job, Reporter reporter) throws IOException {reporter.setStatus(genericSplit.toString());MyDemoRecordReader reader = new MyDemoRecordReader(new LineRecordReader(job, (FileSplit) genericSplit));return reader;}public static class MyDemoRecordReader implements RecordReader<LongWritable, Text> {LineRecordReader reader;Text text;public MyDemoRecordReader(LineRecordReader reader) {this.reader = reader;text = reader.createValue();}[@Override](https://my.oschina.net/u/1162528)public void close() throws IOException {reader.close();}[@Override](https://my.oschina.net/u/1162528)public LongWritable createKey() {return reader.createKey();}[@Override](https://my.oschina.net/u/1162528)public Text createValue() {return new Text();}[@Override](https://my.oschina.net/u/1162528)public long getPos() throws IOException {return reader.getPos();}@Overridepublic float getProgress() throws IOException {return reader.getProgress();}@Overridepublic boolean next(LongWritable key, Text value) throws IOException {while (reader.next(key, text)) {//其实就是在TextInputFormat 的源码中加上一行替换的操作。String strReplace = text.toString().toLowerCase().replaceAll("\\|\\|", "|");Text txtReplace = new Text();txtReplace.set(strReplace);value.set(txtReplace.getBytes(), 0, txtReplace.getLength());return true;}return false;}}}
    
  • 3、将这个类打包成jar,放入hive安装目录下的lib文件夹中。

      hive>add jar /root/apps/hive/lib/myinput.jar
    
  • 4、使用:

    使用以下语句建表即可:

      hive> create table t_bi(id string,name string)> row format delimited> fields terminated by '|'> stored as inputformat 'cn.itcast.bigdata.hive.inputformat.BiDelimiterInputFormat' outputformat            'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat';hive> load data local inpath '/root/hivedata/bi.dat' into table t_bi;hive> select * from t_bi;OK01 zhangsan02 lisi
    

转载于:https://my.oschina.net/liufukin/blog/798534

6、Hive的特殊分隔符处理相关推荐

  1. Hive的列分隔符和行分隔符

    在创建Hive表时,默认行分隔符"^A",列分隔符"\n",这两项也是可以设置的.在实际开发中,一般默认使用默认的分隔符,当然有些场景下也会自定义分隔符. 创建 ...

  2. hive的列分隔符和行分隔符的使用

    目录 一.Hive中默认的分割符如下 二.分隔符的指定与使用 三.建好表之后更改字段分隔符 一.Hive中默认的分割符如下 分隔符 描述 \n 行分隔符 ^A 字段分隔符 \001 ^B array. ...

  3. 详解hive的列分隔符和行分隔符的使用

    hive中在创建表时,一般会根据导入的数据格式来指定字段分隔符和列分隔符.一般导入的文本数据字段分隔符多为逗号分隔符或者制表符(但是实际开发中一般不用着这种容易在文本内容中出现的的符号作为分隔符),当 ...

  4. hive分隔符_Hive踩过的坑-hive多个分隔符的问题

    今天就说说hive多个分隔符的问题. 多分隔符(列)这个问题,也是之前同事给我一份文件我才发现的... 这份文件上列分隔符是@#| hive建表时,ROW FORMAT DELIMITED FIELD ...

  5. hive 按照指定分隔符取最后一个下标

    hive 按照指定分隔符取最后一个下标 split思路 select reverse(split(reverse('其他,沟通中'),',')[1]) 该方法可以实现,但是对于中文有bug,二次反转会 ...

  6. hive xmlserde_hive多分隔符

    hive在建表时,通常使用 ROW FORMAT DELIMITED FIELDS TERMINATED BY "|#" 来限定数据中各个字段的分隔符,这种方式只支持单个分隔符,即 ...

  7. Hive学习笔记-分隔符处理

    hive默认是只支持单字符的分隔符,默认单字符是\001.当然你也可以在创建表格时指定数据的分割符号.如: create table user(name string, password string ...

  8. 对hive中默认分隔符含义的解释

    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\u0001' COLLECTION ITEMS TERMINATED BY '\u0002' MAP KEYS ...

  9. hive一次加载多个文件_0738-6.2.0-如何在Hive中使用多分隔符

    ​文档编写目的 Hive在0.14及以后版本支持字段的多分隔符,参考: https://cwiki.apache.org/confluence/display/Hive/MultiDelimitSer ...

最新文章

  1. 精选实践 | 爱奇艺实用数据库选型树:不同场景如何快速选择数据库?
  2. 2020-12-19通信电子线路第一章
  3. c语言实现socket转json,C++解析JSON进行网络传输--一个通过JSON方式的socket传输
  4. [ MSSQL ]分页排序存储过程
  5. 染色问题 —— 扇形涂色
  6. 投票群体案例介绍(36)
  7. 2022年软考系统架构师论文真题
  8. 【银联支付】php接入银联支付
  9. 利用fitz将pdf文件的每一页输出为高精度的PNG图片
  10. 开源开放 | OpenKG组织发布第二批并更新近十个新冠知识图谱开放数据集
  11. 美国计算机专业研究生学制几年,美国硕士学制:美国硕士读几年毕业
  12. 电子计算机的基本概念简述
  13. JVM--基础--19.4--垃圾收集器--Parallel Scavenge
  14. 面向 Java 开发人员的区块链链代码
  15. 自动化办公1-文件夹文件分类器
  16. Echarts X轴类型为time时,X轴标签的细化(年月日时分秒)
  17. 一台服务器,启动多个redis
  18. Parallels Desktop2023最新版免费虚拟机软件
  19. 关于Alipay支付宝接口--java
  20. php pdo基础增删改查 postgresql的主键自增设置 time()

热门文章

  1. 1亿组图文对,填补中文开源多模态数据集空白!还附带基础模型,来自华为诺亚方舟实验室...
  2. 小猫咪小狗狗也有智能「手表」了,可监测健康,识别情绪,还防乱跑|CES 2022...
  3. 用树莓派DIY血液检测仪,准确率不输专业设备,成本连十分之一都不到
  4. 一流科技CEO袁进辉:人工智能产业化困局和机遇 | 量子位·视点分享回顾
  5. 14.7倍推理加速、18.9倍存储节省!北航、商汤、UCSD提出首个点云二值网络 | ICLR 2021...
  6. 两圆重叠问题你会求解吗?这个问题的准确答案,德国数学家最近才找到
  7. JSP标签:jsp内置标签、jstl标签、自定义标签
  8. Hyperledger Fabric 1.0 从零开始(五)——运行测试e2e
  9. Android 动画汇总-自定义动画
  10. 如何做618数据复盘?你需要掌握这8大思路