在猪中我有以下结构:
(1,{(2),(2),(3),(12)})
我希望将其转换为:
(1,{(2,2),(3,1),(12,1)})
这只是一个小组,并计入包内:( group_key,count)
我已经通过嵌套在foreach中尝试了一些组,但它不起作用。
我怎么能用猪拉丁呢呢?或者我应该自己写一个UDF?
谢谢!
答案 0 :(得分:1)
您可以FLATTEN
退出行李,然后重新分组。如果你有很多行,每个行都有一个小包,这可能会浪费。在那种情况下,我会推荐一个UDF。这应该适合你(未经测试):
DUMP A;
(1, {(2), (2), (3), (12)})
DESCRIBE A;
(x:int, y:bag{})
B = FOREACH A GENERATE x, FLATTEN(y) AS z;
C = GROUP B BY (x, z);
D = FOREACH C GENERATE group.x, group.z, COUNT(B) AS ct;
E = GROUP D BY x;
F = FOREACH E GENERATE group, D.(z,ct);
F应该是你想要的。