豚では、次の構造があります。
(1, {(2), (2), (3), (12)})
そして、私はそれを次のように変換したい:
(1, {(2,2), (3,1), (12,1)})
これは、バッグ内のグループ化とカウントです: (group_key, count)
foreach 内にネストしていくつかのグループを試しましたが、うまくいきません。
豚のラテン語でどうやってそれを行うことができますか? または、UDF を自分で作成する必要がありますか?
ありがとう!
豚では、次の構造があります。
(1, {(2), (2), (3), (12)})
そして、私はそれを次のように変換したい:
(1, {(2,2), (3,1), (12,1)})
これは、バッグ内のグループ化とカウントです: (group_key, count)
foreach 内にネストしていくつかのグループを試しましたが、うまくいきません。
豚のラテン語でどうやってそれを行うことができますか? または、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 はあなたが探しているものでなければなりません。