2015-04-04 53 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