2012-07-18 74 views
9

我正在使用PigLatin過濾一些記錄。使用PigLatin刪除重複項

User1 8 NYC 
User1 9 NYC 
User1 7 LA 
User2 4 NYC 
User2 3 DC 

該腳本應該刪除用戶的副本,並保留其中一條記錄。就像linux中的獨特命令一樣。

輸出應該是:

User1 8 NYC 
User2 4 NYC 

有什麼建議?

回答

20

爲了您的不同將無法正常工作以及你的輸出包含了所有輸入列($0, $1, $2)的具體的例子,你只能在具有列($0, $2)($0)而失去$1投影做的是不同的。

爲了選擇每個用戶一個記錄(任何記錄),您可以使用GROUP BY和嵌套FOREACHLIMIT。例如:

inpt = load '......' ......; 
user_grp = GROUP inpt BY $0; 
filtered = FOREACH user_grp { 
     top_rec = LIMIT inpt 1; 
     GENERATE FLATTEN(top_rec); 
}; 

這種方法將有助於你得到的是對字段的子集獨特的記錄,並限制每個用戶的每一個輸出記錄,你可以控制數量。

+0

謝謝,那正是我正在尋找的。 – aalsum 2012-07-21 18:38:32

0

Pig提供DISTINCT命令來選擇唯一的數據。如果你想使用不同的字段在foreach嵌套塊中使用Distinct。

+0

使用Distinct時要小心.. DISTINCT關鍵字的缺點是:您無法確定只有第一條記錄會被刪除。 – 2013-10-10 12:32:04