2014-12-01 139 views
1

我有這樣的關係:添加關係的領域內袋

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

一種選擇是你可以嘗試這樣的。

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)}) 
+0

謝謝你的回答,但最後我用了一個UDF。 – Junayy 2014-12-03 14:16:36