0

在猪中,我有以下结构:

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

我想把它变成:

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

这只是包内的分组和计数:(group_key,count)

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

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

谢谢!

4

1 回答 1

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 应该是你要找的。

于 2013-04-01T21:17:01.490 回答