2012-03-01 13 views
1

Apache pigでデータを解析していますが、項目がある場合は配列を展開する方法が見つかりませんでした。ここ は、私が働いているスキーマであり、所望の出力の例:Apache Pigで配列を展開する

(col1:int, col2:int, items:{ARRAY_ELEM:(name:chararray, total:int)}) 
input = (1, 1, {("bird", 5), ("bear", 12), ("wolf", 10)}) 
output = (1, 1, "bird", 5, "bear", 12, "wolf", 10) 

は、この変換を行うための方法はありますか?

ありがとうございました!

答えて

2

この変換を今すぐ行う必要がある場合は、おそらくUDFをPythonまたはJavaで実行するのが最も簡単な方法です(組み込みソリューションは認識していません)。

しかし、ほとんどの時間、それはの列同じ数を保つために優れている各レコード(例えばバッグやタプルとしてあなたの配列を維持し、一つのレコードで、それを「フラット化」しません)。

1

this Python UDF I wrote for doing thatをチェックしてください(まもなく間もなくPython PiggyBankの一部になる予定です)。あなたは、あなたのバッグの上にそれを使用して、あなたが望む結果を得るためにそれらを平ら、例えば、データセットが何とかと呼ばれると仮定すると、あなたは私の関数を登録することができる必要があり、その後のような何かを行うことができます:

flattened_blah = FOREACH blah GENERATE item1, item2, FLATTEN(bagToTuple(item3)) AS item4, item5, item6, item7, item8, item9 

また、私はかなり確信していますLinkedIn's DataFuこれを行う方法があります。あなたが豚を使用していてまだそれを使用していない場合は、おそらくそれを見てみるべきです。