私はを使用してPig 10.0
います。foreachでバッグをマージしたい。visitors
次のエイリアスがあるとしましょう。
(a, b, {1, 2, 3, 4}),
(a, d, {1, 3, 6}),
(a, e, {7}),
(z, b, {1, 2, 3})
最初のフィールドでタプルをグループ化し、バッグをセットセマンティックとマージして、次のタプルを取得します。
({1, 2, 3, 4, 6, 7}, a, 6)
({1, 2, 3}, z, 3)
最初のフィールドは、設定されたセマンティックを持つバッグの和集合です。タプルの2番目のフィールドは、グループフィールドです。3番目のフィールドは、バッグ内のアイテムの数です。
次のコードの周りでいくつかのバリエーションを試しましたが(SetUnionをGroup / Distinctに置き換えたなど)、常に目的の動作を実現できませんでした。
DEFINE SetUnion datafu.pig.bags.sets.SetUnion();
grouped = GROUP visitors by (FirstField);
merged = FOREACH grouped {
VU = SetUnion(visitors.ThirdField);
GENERATE
VU as Vu,
group as FirstField,
COUNT(VU) as Cnt;
}
dump merged;
私が間違っているところと、望ましい動作を実装する方法を説明できますか?