hadoop - 如何使用PIG/HIVE/HBASE从文件动态加载没有文本限定符的数据?

标签 hadoop hive hbase apache-pig

我的csv文件包含150列!它包含""作为文本限定符。如何使用""脚本删除引号(pig/hive/hbase dynamic)?同样,我有多个文件(50个具有不同列的csv文件)。如何从其他文件中删除这些""

我尝试使用以下 pig 脚本在文件中的2列:

A = LOAD 'hdfs://<hostname>:<port>/user/test/input.csv' AS line;
B = FOREACH A GENERATE FLATTEN(REGEX_EXTRACT_ALL(line,'"(.*)","(.*)"')) AS (id:int,name:chararray);
STORE B INTO '/user/test/output' USING PigStorage(',');

任何帮助,将不胜感激。

最佳答案

你可以这样尝试吗?

input.txt

"123","456","789"
"abc","def","ghi"

PigScript:
A = LOAD 'input.txt' AS line;
B = FOREACH A GENERATE REPLACE(line,'\\"','') AS line1;
C = FOREACH B GENERATE FLATTEN(STRSPLIT(line1,'\\,',3));
D = FOREACH C GENERATE $0,$1,$2;
DUMP D;

输出:
(123,456,789)
(abc,def,ghi)

您可以将上面的第三行更改为STRSPLIT(line1,'\\,',150),其中150是总列数,并且可以通过$0,$1...$149访问所有值

关于hadoop - 如何使用PIG/HIVE/HBASE从文件动态加载没有文本限定符的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27011154/

相关文章:

hadoop - 减少 HFileOutputFormat 中挂起的作业

hadoop - 自动从 Csv 文件获取数据到 Data Lake 的最佳方法

hadoop - Hadoop Oozie MapReduce操作自定义分区程序

hadoop - Impala - 找不到文件错误

hadoop - 在 Crontab 上安排 Hive 查询

hadoop - 有没有办法在 Hive 中转置数据

hadoop - 记录对于内存缓冲区来说太大。通过 TEZ 使用 Hive 的 ORC 表时出错

sql - SQL是否缓存语句结果

hadoop - Amazon Elastic Map减少Hadoop作业

hadoop - 当我使用自己的 TableInputFormat 时 TableMapper 出现 ClassNotFoundException