Hadoop - 在没有定界符的情况下定义和处理数据,某些列之间没有空格/空格

标签 hadoop mapreduce hive hbase

我是 hadoop 的新手,正在尝试在配置单元中导入文件。我使用的源数据在某些列之间没有分隔符。

例子:

0000856214AB25    256 T PL1423AS ......
2563458547CD12   748 S  AK2523YU ... and so on...

我已经从大型机以 txt 格式导入了这个文件。我有固定字符数的字段第一列(1-10),第二列(11-12),第三列(13-14))

我想要的结果是读取这个原始数据如下:

   1st column - 0000856214
   2nd column - AB
   3rd column - 25 
   4th column - 256
   5th column - T
   6th column - PL
   7th column - 1423AS

如何使用 hive 导入这些数据?

最佳答案

你能试试这个吗?

输入.txt

0000856214AB25    256 T PL1423AS
2563458547CD12   748 S  AK2523YU

使用正则表达式创建 Hive 表:

hive> CREATE TABLE test_regex(
    >f1 STRING,f2 STRING,
    >f3 STRING,f4 STRING,
    >f5 STRING,f6 STRING,
    >f7 STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' 
    >WITH SERDEPROPERTIES ("input.regex" = 
    >"([0-9]{10})([A-Z]{2})([0-9]{2})\\s+([0-9]{3})\\s+([A-Z]{1})\\s+([A-Z]{2})([A-Z0-9]{6})",
    >"output.format.string" = "%1$s %2$s %3$s %4$s %5s %6s %7s")
    >STORED AS TEXTFILE;
OK
Time taken: 0.056 seconds

数据加载:

hive> load data local inpath 'input.txt' overwrite into table test_regex;
OK
Time taken: 0.183 seconds

列选择:

hive> select f1,f3,f5,f7 from test_regex;
OK
0000856214  25  T   1423AS
2563458547  12  S   2523YU

hive> select *from test_regex;
OK
0000856214  AB  25  256 T   PL  1423AS
2563458547  CD  12  748 S   AK  2523YU
Time taken: 0.094 seconds

关于Hadoop - 在没有定界符的情况下定义和处理数据,某些列之间没有空格/空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27101878/

相关文章:

shell - Amazon EMR:如何在参数中添加带有嵌入式shell脚本的Amazon EMR MapReduce/Hive/Spark步骤?

hadoop - Partitioner 类中的参数 numPartitions

hadoop - 为什么我的所有 map 输出记录都没有减少?

java - 在不使用context.write的情况下使用MultipleOutputs将导致空文件

hadoop - 我们可以在 mapreduce 中使用 log4j 吗?

hadoop - 如何在Hive,Impala或Spark中转置数据?

hadoop - HIVE 将覆盖插入分区表

hadoop - Hadoop HDFS如何决定将哪些数据放入每个 block 中?

Windows 中的 Hadoop

java - 如何通过对Hive进行编码来模拟用户