hadoop-定义和处理没有delimeter的数据,某些列之间没有空格

omjgkv6w  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(266)

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

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

我已经以txt格式从大型机导入了这个文件。我有固定字符数的字段(第1列(1-10)、第2列(11-12)、第3列(13-14))
我想要的结果是如下读取这些原始数据:

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

如何使用配置单元导入此数据?

gojuced7

gojuced71#

你能试试这个吗?。
输入文件

0000856214AB25    256 T PL1423AS
2563458547CD12   748 S  AK2523YU

使用regex创建配置单元表:

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
cxfofazt

cxfofazt2#

感谢sivasakthi jayaraman的解决方案
我为上次的错误找到了解决办法。
下载jar hive-contrib-0.8.1.jar (在我的情况下,我 hive-contrib-0.12.0-cdh5.0.2.jar/usr/lib/hive/lib/ 路径。) ADD JAR /home/user17/hive/hive-contrib-0.8.1.jar (就我而言— ADD JAR /usr/lib/hive/lib/hive-contrib-0.12.0-cdh5.0.2.jar )
您将看到它将被添加。
现在,

select f1 from test_regex;

0000856214
2563458547
(如预期)

相关问题