pig(hadoop)-具有可变列的行

velaa5lx  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(352)

玩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
所以基本上是按id分组,然后展平其余的列并将其作为每行输出。
Pig在这里是正确的方法吗?我有办法在m/r中做到这一点,但我认为pig可能是这类事情的理想选择。
非常感谢您提供的任何提示
邓肯
ps我不关心值的顺序。

tzdcorbm

tzdcorbm1#

未经测试,但我采用的一般方法是:获取一个包含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;

相关问题