如何在袋子里循环通过元组,猪

时间:2016-10-18 20:38:14

标签: apache-pig

我是猪脚本的新手。

我有一个输入(A,B,{(XYZ,123,CDE)})

我希望在内部循环并打印以下记录。

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

有人可以帮帮我!

2 个答案:

答案 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)