我有这样的关系:
R1 : a:chararray,b:chararray,c:bag{t:tuple(c1:chararray,c2:chararray)}
所以数据看起来像:
(a,b,{(aa,bb),(cc,dd)})
(e,f,{(gg,hh),(ii,jj)})
我希望得到:
R2 : c:bag{t:tuple(c1:chararray,c2:chararray,b:chararray,a:chararray,)}
所以:
{(aa,bb,b,a),(cc,dd,b,a)})
{(gg,hh,f,e),(ii,jj,f,e)}
我用嵌套的foreach尝试了几种解决方案并将袋子弄平,我尝试了交叉连接......但是没有任何好的解决方案。
特别是我预计这应该有效:
FOREACH R1 {
flatC= FOREACH R1 GENERATE FLATTEN(c) as c1,c2,c3;
GENERATE
a,
b,
c1,
c2,
c3;
};
有没有人有想法?
感谢
答案 0 :(得分:0)
可以选择这样一个选项。
<强> input.txt中强>
a b {(aa,bb),(cc,dd)}
e f {(gg,hh),(ii,jj)}
<强> PigScript:强>
A= LOAD 'input.txt' AS (a:chararray,b:chararray,c:bag{(c1:chararray,c2:chararray)});
B = FOREACH A GENERATE FLATTEN(c),b,a;
C = GROUP B BY (b,a);
D = FOREACH C GENERATE $1;
DUMP D;
DESCRIBE D;
<强>输出:强>
({(aa,bb,b,a),(cc,dd,b,a)})
({(gg,hh,f,e),(ii,jj,f,e)})