使用 PIG 拉丁语将数组转置为行



如何将BAG中的ARRY元素转换为多行,例如:下面

我的输入:

元组,ARRAY_ELEM (32,{(1,emp,3271409712(,(2,emp,3271409712(}(

输出 (32,1,emp,3271409712( (32,2,emp,3271409712(

您可能需要调用 FLATTEN 两次。 请注意,元组上的 FLATTEN 只是将元组中的每个字段提升为顶级字段。 FLATTEN on bag 生成包中每条记录的交叉乘积,以及 GENERATE 中的所有其他表达式。

A = load 'test.txt' using PigStorage() as (a0:int, t1:(a1:int, b1 {(a3:int,a4:chararray,a5:chararray)}));
describe A;
B = FOREACH A GENERATE FLATTEN(t1);  
describe B;
C = FOREACH B GENERATE a1, FLATTEN(b1);
describe C;
dump C;

输出

A: {a0: int,t1: (a1: int,b1: {(a3: int,a4: chararray,a5: chararray)})}
B: {t1::a1: int,t1::b1: {(a3: int,a4: chararray,a5: chararray)}}
C: {t1::a1: int,t1::b1::a3: int,t1::b1::a4: chararray,t1::b1::a5: chararray}
(32,1,emp,3271409712)
(32,2,emp,3271409712)

最新更新