我想用pig Script处理文件
我的输入文件是这个(&
是列分隔符,$
是行分隔符):
abc&bc&121&aa$aaj&jkj&print&star$aa&tss&jjlk&121
我试过了:
a = LOAD 'try.txt' USING PigStorage ('$') as (col1:chararray); b = FOREACH a Generate REPLACE(col1, '&', ',');
我试图在第一个分隔符之后分离一个元组,但我只使用它获得第一个元组。
我正在寻找的输出文件:
(abc,bc,121,aa)
(aaj,jkj,print,star)
(aa,tss,jjlk,121)
任何帮助?
答案 0 :(得分:0)
你能试试吗?
选项1:
<强>输入强>
abc&bc&121&aa$aaj&jkj&print&star$aa&tss&jjlk&121
<强> PigScript:强>
A = LOAD 'input' AS (line:chararray);
B = FOREACH A GENERATE FLATTEN(TOKENIZE(line,'$')) AS splittedLine;
C = FOREACH B GENERATE FLATTEN(STRSPLIT(splittedLine,'&')) AS(col1,col2,col3,col4);
DUMP C;
<强>输出:强>
(abc,bc,121,aa)
(aaj,jkj,print,star)
(aa,tss,jjlk,121)
<强>选项2:强>
<强> PigScript:强>
A = LOAD 'input' USING PigStorage('$') AS (row1:chararray,row2:chararray,row3:chararray);
B = FOREACH A GENERATE FLATTEN(TOBAG(STRSPLIT(row1,'&'),STRSPLIT(row2,'&'),STRSPLIT(row3,'&')));
DUMP B;
<强>输出:强>
(abc,bc,121,aa)
(aaj,jkj,print,star)
(aa,tss,jjlk,121)