作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想将具有制表符和逗号分隔值的文本文件转换为 PIG 中的完全逗号分隔值。我正在使用 Apache Pig 版本 0.11.1.,我尝试使用以下代码并尝试使用 FLATTEN、TOKENIZE。但我不能把它变成完整的 CSV 文件。
a = load '/home/mansoor/Documents/ip.txt' using PigStorage(',') as (key:chararray, val1:chararray, val2:chararray );
b = FOREACH a {
key= STRSPLIT(key,'\t');
GENERATE key;
}
以下是我的文本文件输入:
M12345 M123456,M234567,M987653
M23456 M23456,M123456,M234567
M34567 M234567,M765678,M987643
我需要一个包含完整 CSV 文件的文件,如以下输出:
M12345,M123456,M234567,M987653
M23456,M23456,M123456,M234567
M34567,M234567,M765678,M987643
我该怎么做?
最佳答案
对于 pig 0.13,仅使用 load
而不使用 PigStorage
可以很好地加载 csv。
a = load '/home/mansoor/Documents/ip.txt';
dump a
给我
(M12345,M123456,M234567,M987653)
(M23456,M23456,M123456,M234567)
(M34567,M234567,M765678,M987643 )
如果这不是您想要的,您可能需要考虑 REPLACE
函数。这是处理可用 csv 的快速而肮脏的解决方案:
a = load '/home/mansoor/Documents/ip.txt' using PigStorage('\n');
b = foreach a generate FLATTEN(REPLACE($0, '\t', ','));
store b into 'tmp.csv';
然后您可以按预期使用 csv :
c = load 'tmp.csv' using PigStorage(',') as (key:chararray, val1:chararray, val2:chararray, val3:chararray);
describe c
给出 c: {key: chararray,val1: chararray,val2: chararray, val3:chararray}
关于hadoop - 如何在 Pig 中拆分具有 '\t' 和 ',' 值的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25154974/
我是一名优秀的程序员,十分优秀!