0

豚では、次の構造があります。

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

そして、私はそれを次のように変換したい:

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

これは、バッグ内のグループ化とカウントです: (group_key, count)

foreach 内にネストしていくつかのグループを試しましたが、うまくいきません。

豚のラテン語でどうやってそれを行うことができますか? または、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 に答える