我是新手。我有意见, (A,B,{(XYZ,123,CDE)}) 我想在里面的袋子里循环打印以下记录。
(A,B,{(XYZ,123,CDE)})
(A,B,XYZ) (A,B,123) (A,B,CDE)
有人能帮帮我吗!
w7t8yxp51#
解决了的!!让我们加载下面的文件(制表符分隔)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;
这将导致以下结果output:-(a,b,{(xyz),(123),(cde)})最后一步是把袋子弄平
final_output = foreach intermed2_output generate entry1, entry2, FLATTEN($2);
我们有我们想要的output:-
laik7k3q2#
假设x是你的关系,它有 (A,B,{(XYZ,123,CDE)}) .tobag将表达式转换为bag并展平unnests元组bag。
Y = FOREACH X GENERATE $0,$1,ToBag(FLATTEN($2));
2条答案
按热度按时间w7t8yxp51#
解决了的!!
让我们加载下面的文件(制表符分隔)
a b{(xyz,123,cde)}
这会给你
(a、b、xyz、123、cde)
现在执行tobag操作
这将导致以下结果output:-
(a,b,{(xyz),(123),(cde)})
最后一步是把袋子弄平
我们有我们想要的output:-
laik7k3q2#
假设x是你的关系,它有
(A,B,{(XYZ,123,CDE)})
.tobag将表达式转换为bag并展平unnests元组bag。