无法使用pigstorage处理数据

ejk8hzay  于 2021-06-25  发布在  Pig
关注(0)|答案(1)|浏览(262)

我想要一个用pig脚本处理的文件
我的输入文件是( & 是柱delimeter和 $ 是行(delimeter):

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, '&', ',');

我试图在第一个delimeter之后分离一个元组,但是我用这个只能得到第一个元组。
outputfile我要查找的内容:

(abc,bc,121,aa)
(aaj,jkj,print,star)
(aa,tss,jjlk,121)

有什么帮助吗?

dgiusagp

dgiusagp1#

你能试试这个吗?
选项1:
输入

abc&bc&121&aa$aaj&jkj&print&star$aa&tss&jjlk&121

Pig手稿:

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:
Pig手稿:

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)

相关问题