2011-10-17 38 views
0

我有两个文件,一个叫A记录如何在Apache PIG中正确执行内部连接?

123^record1 
222^record2 
333^record3 

和其他文件,称为B-记录

123^jim 
123^jim 
222^mike 
333^joe 

你可以在我的令牌123一次文件中的看到。在文件B中有两次。有没有办法使用Apache PIG我可以加入数据,这样我只能从A文件中获得一个连接记录?

这里是我当前的脚本输出如下

arecords = LOAD '$a' USING PigStorage('^') as (token:chararray, type:chararray); 

brecords = LOAD '$b' USING PigStorage('^') as (token:chararray, name:chararray); 


x = JOIN arecords BY token, brecords BY token; 

dump x; 

这将产生如下:

(123,record1,123,jim) 
(123,record1,123,jim) 
(222,record2,222,mike) 
(333,record3,333,joe) 

当我真正想要的是(通知令牌123只在有一次后加入)

(123,record1,123,jim) 
(222,record2,222,mike) 
(333,record3,333,joe) 

有什么想法吗?非常感谢

回答

4

我会做这样的事情:

arecords = LOAD '$a' USING PigStorage('^') as (token:chararray, type:chararray); 

brecords = LOAD '$b' USING PigStorage('^') as (token:chararray, name:chararray); 

bdistinct = DISTINCT brecords; 

x = JOIN arecords BY token, bdistinct BY token; 

dump x; 
+0

完全正确,我应该做我的右手边鲜明。现在,这一切都很好,谢谢! – James

+0

不客气 – frail