Hadoop 如何拆分具有'\t';和'';猪的价值观

Hadoop 如何拆分具有'\t';和'';猪的价值观,hadoop,apache-pig,Hadoop,Apache Pig,我想转换文本文件,其中有制表符和逗号分隔的值到猪完全逗号分隔的值。我使用的是ApachePig版本0.11.1,我尝试了以下代码,并尝试了Flatte、TOKENIZE。但我无法将其完全转换为CSV文件 a = load '/home/mansoor/Documents/ip.txt' using PigStorage(',') as (key:chararray, val1:chararray, val2:chararray ); b = FOREACH a { key= STR

我想转换文本文件,其中有制表符和逗号分隔的值到猪完全逗号分隔的值。我使用的是ApachePig版本0.11.1,我尝试了以下代码,并尝试了Flatte、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 

如何实现这一点?

使用清管器0.13,只需使用
加载
而不使用
PigStorage
即可很好地加载csv

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

(M12345,M123456,M234567,M987653)
(M23456,M23456,M123456,M234567)
(M34567,M234567,M765678,M987643 )
如果这不是你想要的,你可能想考虑一下这个函数。 下面是一个处理可用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}
试试这个

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

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

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

a=load'/home/mansoor/Documents/ip.txt',使用PigStorage(',')作为(key:chararray,val1:chararray,val2:chararray);b=FOREACH a{key=STRSPLIT(key,'\t');GENERATE key;}。。我尝试使用STRSPLIT,TOKENIZE,但我无法将其转换为完全csv文件。您能告诉我拆分为完全csv文件的简单方法吗?如果您的问题得到解决,请不要忘记接受答案。如果我尝试b=foreach a generate replace($0,“\t',”,”);显示错误,如无法使用导入解决替换。非常感谢。它起作用了。但如果我描述c,它看起来像一个空元组。如果我想从c获得$0和$2,意味着它显示了越界访问之类的错误。如何解决这个问题?转储c的输出是什么?((M123456,M123456,M234567,M987653))((M23456,M23456,M123456,M234567))((M34567,M234567,m7678,M987643))的输出。如果我尝试使用d=foreach c generate$0从c获取$0和$2,我会出现越界访问错误。但我需要一个文件,可以像正常的CSV文件M12345、M123456、M234567、M987653这样轻松访问。@kardowh我发布了一个快速而肮脏的解决方法。当我找到更好的答案时,我会更新我的答案。