将Pig中的字符串拆分为一列,然后将其存储在一行中

时间:2016-03-21 21:36:46

标签: split apache-pig etl

我有一个csv文件,其中包含4列数据,但有250000行。

A          B      C     D               
Tom        1      x    Blah Blah Blah
Bob        2      y    Blah <p> Blah
Jane       3      z    Blah, &p *£
Harry      4      a    Blah "p" Blah

在第4栏中,我有一个字符串,其中包含各种字符,一些代码,一些特殊字符,一些文本。

我想把D中的每个单词与A中的内容结合起来并将其存储在一个新行中,即

Tom Blah
Tom Blah
Tom Blah
Bob Blah
Bob <p>
Bob Blah
Jane Blah,
Jane &p
Jane *£
Harry Blah
Harry "p"
Harry Blah

1 个答案:

答案 0 :(得分:1)

您必须使用STRSPLITTOBAG将数据集第4列中的值转换为首先拆分数据并将其转换为行。最后CONCAT结果带有''。

的2列

猪脚本

A = LOAD 'test6.txt' USING PigStorage('\t') AS (f1:chararray,f2:chararray,f3:chararray,f4:chararray);
B = FOREACH A GENERATE f1,FLATTEN(STRSPLIT(f4,' '));
C = FOREACH B GENERATE $0,FLATTEN(TOBAG($1,$2,$3));
D = FOREACH C GENERATE CONCAT($0,CONCAT(' ',$1));
DUMP D;;

<强>输出

TOBAG