3

pig では、データを次のようにマッサージしました。

(a,{(b,c),(d,e),(f,g)})
(h,{(i,j),(k,l)})

ここで、最初の項目はグループで、バッグはグループに関連するその他の値です。次の形式で取得したいと思います。

(a,b,c,d,e,f,g)
(h,i,j,k,l)

私は今いる場所にたどり着きました

grunt> j = foreach G {            
>>     o = order myvar by second;
>>     generate group, o.(first,second);
>> };

したがって、バッグ内のタプルは現在順序付けされています。私が何かmystuff = foreach j generate group, flatten($1);をすると、すべてが平らになり、グループ化されなくなります。

これは豚で可能ですか?もしそうなら、どのコマンドを見ればよいですか?

4

1 に答える 1

3

箱から出してあなたが望むことをすることができる方法はありません。これにはユーザー定義関数を使用する必要があります。Java や Python のコードを書かなければならないので、面倒なことはわかっていますが、Pig では十分に機能しない状況がいくつか見つかります。Pig はデータ フロー言語と見なすことができ、プログラミング言語ではありません。UDF が重要な役割を果たしているのはそのためです。UDF はギャップを埋めます。

私の提案は、groupand 値バッグをパラメーターとして受け取る UDF を作成することです。UDF での順序付け/並べ替えと、平坦化を行います。


もう 1 つ気をつけなければならないことは、行の列数が異なるため、Pig はこれをあまり好まないということです。すぐに出力するだけの場合は、おそらくこれで回避できます。UDF でリストをタブ区切りの文字列または事前にフォーマットされたものに書き出すことを検討することをお勧めします。これは大したことではありません... ここでの私のアドバイスは無視してください。

于 2012-08-12T23:50:03.287 に答える