我正在使用PigLatin過濾一些記錄。使用PigLatin刪除重複項
User1 8 NYC
User1 9 NYC
User1 7 LA
User2 4 NYC
User2 3 DC
該腳本應該刪除用戶的副本,並保留其中一條記錄。就像linux中的獨特命令一樣。
輸出應該是:
User1 8 NYC
User2 4 NYC
有什麼建議?
我正在使用PigLatin過濾一些記錄。使用PigLatin刪除重複項
User1 8 NYC
User1 9 NYC
User1 7 LA
User2 4 NYC
User2 3 DC
該腳本應該刪除用戶的副本,並保留其中一條記錄。就像linux中的獨特命令一樣。
輸出應該是:
User1 8 NYC
User2 4 NYC
有什麼建議?
爲了您的不同將無法正常工作以及你的輸出包含了所有輸入列($0, $1, $2)
的具體的例子,你只能在具有列($0, $2)
或($0)
而失去$1
投影做的是不同的。
爲了選擇每個用戶一個記錄(任何記錄),您可以使用GROUP BY
和嵌套FOREACH
與LIMIT
。例如:
inpt = load '......' ......;
user_grp = GROUP inpt BY $0;
filtered = FOREACH user_grp {
top_rec = LIMIT inpt 1;
GENERATE FLATTEN(top_rec);
};
這種方法將有助於你得到的是對字段的子集獨特的記錄,並限制每個用戶的每一個輸出記錄,你可以控制數量。
Pig提供DISTINCT命令來選擇唯一的數據。如果你想使用不同的字段在foreach嵌套塊中使用Distinct。
使用Distinct時要小心.. DISTINCT關鍵字的缺點是:您無法確定只有第一條記錄會被刪除。 – 2013-10-10 12:32:04
謝謝,那正是我正在尋找的。 – aalsum 2012-07-21 18:38:32