Pigで大量のデータを処理しており、レコードを 1 つのフィールドまたは別のフィールドでグループ化する必要があります。classic ではないことに注意してください。つまりGROUP BY X AND Y
、属性 X または Y の値が同じ場合、2 つのレコードをグループ化する必要があります。
たとえば、次のデータセットがあるとします。
1, a, 'r1'
2, b, 'r2'
3, c, 'r3'
4, a, 'r4'
3, d, 'r5'
5, c, 'r6'
5, e, 'r7'
最初または 2 番目のフィールドでグループ化した結果は次のようになります。
{(1, a, 'r1'), (4, a, 'r4')}
{(2, b, 'r2')}
{(3, c, 'r3'), (3, d, 'r5'), (5, c, 'r6'), (5, e, 'r7')}
(1) 'r1' と 'r4' の 2 番目の属性の値が同じであるため。
(2) レコード 'r2' には、最初または 2 番目のフィールドの一致がありません。
(3) 最後に、「r3」は最初の属性の値を「r5」と共有し、2 番目のフィールドの値を「r6」と共有します。また、'r6' は 'r7' と最初の属性の同じ値を共有します。'r3' と 'r7' には共通のフィールドはありませんが、チェーン レコードは同じグループで終わっていることに注意してください。
私は Java (Pig 以外) を使用してこの問題を解決しました。また、Map-Reduce を使用して解決する方法も知っています。しかし、(学ぶために) Pig-latin、またはこのようなことに役立つライブラリを使用してそれを行う方法を知りたいです。