6

私のデータセットは次のようになります。

( A, (1,2) )
( B, (2,9) )

Pig でタプルを「平坦化」したいと思います。基本的には、内側のタプルで見つかった各値に対して各レコードを繰り返します。期待される出力は次のようになります。

( A, 1 )
( A, 2 )
( B, 2 ) 
( B, 9 )

タプル (1,2) と (2,9) が代わりにバッグである場合、これが可能であることはわかっています。

4

3 に答える 3

9

あなたの洞察力は素晴らしいです。タプルをバッグに変換することで可能です。目指したいスキーマは次のとおりです: {a: chararray,{(chararray)}} 例: (A,{(1),(2)})

問題の解決策は次のとおりです。

A = LOAD 'data.txt' AS (a:chararray,b:(b1:chararray,b2:chararray));
B = FOREACH A GENERATE a, TOBAG(b.b1,b.b2);
C = FOREACH B GENERATE a, FLATTEN($1);

魔法の部分は TOBAG オペレーターです。

于 2012-07-24T14:43:10.093 に答える
3

DataFu の UDF TransposeTupleToBag ( http://datafu.incubator.apache.org/docs/datafu/1.1.0/datafu/pig/util/TransposeTupleToBag.html ) を使用してから、バッグをフラット化して、バッグ。

于 2014-05-15T09:05:25.793 に答える