我是猪脚本的新手。
我有一个输入(A,B,{(XYZ,123,CDE)})
我希望在内部循环并打印以下记录。
(A,B,XYZ)
(A,B,123)
(A,B,CDE)
有人可以帮帮我!
答案 0 :(得分:1)
让我们说X是你的关系,它有(A,B,{(XYZ,123,CDE)})
。ToBag将表达式转换为包,而FLATTEN则不包含元组,包。
Y = FOREACH X GENERATE $0,$1,ToBag(FLATTEN($2));
答案 1 :(得分:0)
解决!!
让我们加载到文件下面(Tab分隔)
A B {(XYZ,123,CDE)}
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;
这将给出
(A,B,XYZ,123,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)})
现在最后一步是FLATTEN袋子
final_output = foreach intermed2_output generate entry1, entry2, FLATTEN($2);
我们有我们想要的输出: -
(A,B,XYZ)
(A,B,123)
(A,B,CDE)