在猪中,我有以下结构:
(1, {(2), (2), (3), (12)})
我想把它变成:
(1, {(2,2), (3,1), (12,1)})
这只是包内的分组和计数:(group_key,count)
我已经通过嵌套在 foreach 中尝试了一些 group,但它不起作用。
我怎么能用猪拉丁做呢?或者我应该自己写一个UDF?
谢谢!
在猪中,我有以下结构:
(1, {(2), (2), (3), (12)})
我想把它变成:
(1, {(2,2), (3,1), (12,1)})
这只是包内的分组和计数:(group_key,count)
我已经通过嵌套在 foreach 中尝试了一些 group,但它不起作用。
我怎么能用猪拉丁做呢?或者我应该自己写一个UDF?
谢谢!
您可以直接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 应该是你要找的。