PIG(Hadoop) - 具有可变列的行

时间:2013-04-17 16:05:42

标签: hadoop apache-pig

使用Pig,我的输入文件是:

1,4,6

1,2,7,9

2,5,1

1,3,5,1

2,6,2,8

每行的第一个值是ID;行的其余部分只是唯一值(每行可以有不同数量的列)。

我想将上述内容转换为:

1,2,4,6,7,9,3,5,1

2,5,1,6,2,8

所以基本上是GROUP by ID,然后将其余的列展平并输出每行。

PIG甚至是正确的方法吗?我有办法在M / R中做到这一点,但认为Pig可能是这种事情的理想选择。

非常感谢提供的任何提示

邓肯

PS我不关心值的顺序。

1 个答案:

答案 0 :(得分:2)

未经测试,但这是我采取的一般方法:获取一个包含ID和一包值的变量,将其展平,以便获得只有id和单个值的行,取不同的行,然后按ID。这将为每个ID提供一个值,如果您想输出,可以转换为字符串。

A = LOAD 'input' USING TextLoader() as line:chararray; 
B = FOREACH A GENERATE STRSPLIT(line,',',2) as (id:chararray,values:chararray)
C = FOREACH B GENERATE id, FLATTEN(TOBAG(STRSPLIT(values,','))) as value:chararray;
D = DISTINCT C; -- I'm assuming you actually want distinct values, wasn't clear.
E = GROUP D by id;
F = FOREACH E GENERATE group as id, BagToString(D.value) as valueString:chararray;