如何拆分pig中有'\t'和','值的文本文件

eulz3vhy  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(358)

我想转换文本文件,这是有制表符和逗号分隔的值到Pig完全逗号分隔的值。我使用的是ApachePig版本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

我该怎么做?

hof1towb

hof1towb1#

试试这个,

a = load '/home/mansoor/Documents/ip.txt';

store a into '/home/mansoor/Documents/op' using PigStorage(',');

现在该文件已完全转换为csv文件。

k5hmc34c

k5hmc34c2#

用Pig0.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}

相关问题