猪:每排一包

时间:2013-03-29 14:57:14

标签: apache-pig

在猪中我有以下结构:

(1,{(2),(2),(3),(12)})

我希望将其转换为:

(1,{(2,2),(3,1),(12,1)})

这只是一个小组,并计入包内:( group_key,count)

我已经通过嵌套在foreach中尝试了一些组,但它不起作用。

我怎么能用猪拉丁呢呢?或者我应该自己写一个UDF?

谢谢!

1 个答案:

答案 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应该是你想要的。