2016-10-18 3 views
2

私は豚のスクリプトに慣れていません。私は入力を持ってバッグ、豚のタプルをループする方法

(A,B,{(XYZ,123,CDE)})

が、私は内部の袋をループし、次のレコードを印刷していますよ。

(A,B,XYZ) 
(A,B,123) 
(A,B,CDE) 

誰かが私を助けてくれますか?

答えて

1

Xはあなたの関係であり、それは(A,B,{(XYZ,123,CDE)})です.ToBagは式をバッグに変換し、FLATTENはタプル、バッ​​グをネストしません。

Y = FOREACH X GENERATE $0,$1,ToBag(FLATTEN($2)); 
+0

こんにちは、次の方法でレコードを印刷しますFLATTENを使用して:(A、B、XYZ、123、CDE) – miniscule001

+0

私はバッグのすべてのタプルに対して新しいレコードを挿入したいと思います。 – miniscule001

+0

@ miniscule001 Try ToBag(FLATTEN($ 2)) –

0

解決済み!

これは

(A、B、XYZ、123を与える

input_plus_bag = load '' USING PigStorage() AS (entry1:chararray, entry2:chararray, bag1:bag{(te1:chararray, te2:int, te3:chararray)}); 

intermed_output = foreach input_plus_bag generate entry1, entry2, FLATTEN(bag1); 

Dump intermed_output; 

AB {(XYZ、123、CDE)}

(タブ区切り)、私たちは、ファイルの下ロードうCDE)

DESCRIBE intermed_output; 

intermed_output: {entry1: chararray,entry2: chararray,bag1::te1: chararray,bag1::te2: int,bag1::te3: chararray} 

TOBAG操作を行います
intermed2_output = foreach intermed_output generate entry1, entry2, TOBAG(bag1::te1,bag1::te2,bag1::te3); 

DUMP intermed2_output; 

これは出力の下になります: -

(A、B、{(XYZ)、(123)、(CDE)})

を今最後のステップは、バッグ

を平坦です
final_output = foreach intermed2_output generate entry1, entry2, FLATTEN($2); 

は、そして、私たちは私たちの所望の出力を持っている: -

(A,B,XYZ) 
(A,B,123) 
(A,B,CDE) 
関連する問題