2015-04-04 76 views
1

即时通讯编程在猪拉丁文中,我有一个问题。猪加入两个仅与加入伙伴的关系

比方说,我有以下两个关系(A和B):

Relation A: http://i.stack.imgur.com/Aa5Rd.png 

Relation B: http://i.stack.imgur.com/m467q.png 

现在,关系应该被加入,但只在一个键(id)时存在。否则不是。所以结果应该是这样的:

关系Result: i.stack.imgur.com/3elgh.png(我不能发布超过2个链接)

我该如何解决呢?

我的方法结果= JOIN A BY ID,B BY ID;,因为它创建了所有的ID &文本结果关系:/

非常感谢你提前,

Stefanos的

回答

0

你的做法是正确的。我提到了正确的输出,但不知道为什么你没有得到输出。你可以交叉检查你的猪脚与下面的一个吗?

INPUT1:

1 
4 
6 

输入2:

1,peter 
2,jay 
3,dan 
4,knut 
5,Gnu 
6,rafael 
7,hans 

PigScript:

A = LOAD 'input1' AS (id:int); 
B = LOAD 'input2' USING PigStorage(',') AS (id:int,text:chararray); 
C = JOIN A BY id,B BY id; 
D = FOREACH C GENERATE A::id AS id,B::text as text; 
DUMP D; 

输出:

(1,peter) 
(4,knut) 
(6,rafael) 
0

感谢它似乎工作,但我有一个额外的问题!

有什么办法,防止重复连接(id)?

所以当输入2“1,peter”和“1,jan”是,是否有可能删除重复?

所以问题是在实际中,我在输入2中有一个id和json字符串,而这个json字符串可以通过“”来区分。

+0

在连接操作之前,在input2中尝试distinct命令。 http://pig.apache.org/docs/r0.13.0/basic.html#distinct – 2015-04-06 14:46:38

+0

不幸的是,distinct在我的情况下不起作用,因为列是从json(与elephantbird)中解析出来的,并且这些列的内容可以区分每个记录(例如timestamp_created)。所以这意味着一个ID可以有不同的记录,所以不同的人不能识别出另一个记录具有相同的ID。 – Stefanos13 2015-04-06 15:55:38

+0

感谢您的帮助Sivasakthi,但我通过使用这个帖子与组/限制使用代码从stackoverflow :-) http://stackoverflow.com/questions/11534041/removing-duplicates-using-piglatin – Stefanos13 2015-04-06 16:32:26