2015-09-04 76 views
4

我有兩組元組,我想通過第一個元素內聯它們並將其他部分合併到一個元組中,想知道如何在Pig on Hadoop中實現這個?在Pig中合併元組

輸入二元組套,

1,(1,2) 
2,(2,3) 

1,(b,c,b,c) 
2,(c,d,c,d) 

預計輸出,

1,(1,2,b,c,b,c) 
2,(2,3,c,d,c,d) 

在此先感謝, 林

回答

1

一個想法值得考慮......

輸入:

數據A:

1 (1,2) 
2 (2,3) 

數據B:

1 (b,c,b,c) 
2 (c,d,c,d) 

豬腳本:

A = LOAD 'dataA' USING PigStorage('\t') AS (aid:long, atuple : tuple(af1:long, af2:long)); 
B = LOAD 'dataB' USING PigStorage('\t') AS (bid:long, btuple : tuple(bf1:chararray, bf2:chararray, bf3:chararray, bf4:chararray)); 
C = JOIN A BY aid, B BY bid; 
D = FOREACH C GENERATE aid AS id, FLATTEN(atuple) AS (af1:long, af2:long) , FLATTEN(btuple) AS (bf1:chararray, bf2:chararray, bf3:chararray, bf4:chararray); 
E = FOREACH D GENERATE id, (af1..bf4); 
DUMP E; 

輸出:d UMP E:

(1,(1,2,b,c,b,c)) 
(2,(2,3,c,d,c,d)) 
+0

非常感謝,但是如果每行的第二個元組有不同數量的元素,你會如何處理? –

+0

@LinMa:如果我們知道一行中元素的最大數目,那麼我們可以爲它們聲明別名,或者我們可以使用$ notation來訪問元素。例如:如果元組1中的元素的最大數量是2,並且元組2中是100,那麼當在樣本集使用($ 1..103)中導出用於別名E的元組時, –