私は豚のスクリプトに慣れていません。私は入力を持ってバッグ、豚のタプルをループする方法
、(A,B,{(XYZ,123,CDE)})
が、私は内部の袋をループし、次のレコードを印刷していますよ。
(A,B,XYZ)
(A,B,123)
(A,B,CDE)
誰かが私を助けてくれますか?
私は豚のスクリプトに慣れていません。私は入力を持ってバッグ、豚のタプルをループする方法
、(A,B,{(XYZ,123,CDE)})
が、私は内部の袋をループし、次のレコードを印刷していますよ。
(A,B,XYZ)
(A,B,123)
(A,B,CDE)
誰かが私を助けてくれますか?
Xはあなたの関係であり、それは(A,B,{(XYZ,123,CDE)})
です.ToBagは式をバッグに変換し、FLATTENはタプル、バッグをネストしません。
Y = FOREACH X GENERATE $0,$1,ToBag(FLATTEN($2));
解決済み!
これは
(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)
こんにちは、次の方法でレコードを印刷しますFLATTENを使用して:(A、B、XYZ、123、CDE) – miniscule001
私はバッグのすべてのタプルに対して新しいレコードを挿入したいと思います。 – miniscule001
@ miniscule001 Try ToBag(FLATTEN($ 2)) –