2015-09-04 74 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的元组时, –