2012-07-18 37 views
9

Używam PigLatin do filtrowania niektórych rekordów.Usuwanie duplikatów za pomocą PigLatin

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

Skrypt powinien usunąć duplikat dla użytkowników i zachować jeden z tych rekordów. Coś jak unikalne polecenie w Linuksie.

Wyjście powinno być:

User1 8 NYC 
User2 4 NYC 

Wszelkie sugestie?

Odpowiedz

20

dla konkretnego przykładu odrębny nie będzie działać również swoje wyjście zawiera wszystkie kolumny wejściowych ($0, $1, $2), można to zrobić tylko na wyraźny występu, który ma kolumny ($0, $2) lub ($0) i tracą $1.

Aby wybrać jeden rekord na użytkownika (dowolny rekord), można użyć numeru GROUP BY i zagnieżdżonego FOREACH z LIMIT. Ex:

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

Takie podejście pomoże Ci uzyskać rekordy, które są unikalne na podzbiorze dziedzin, a także ograniczyć liczbę rekordów wyjściowych za każdego użytkownika, który można kontrolować.

+0

Dziękuję, właśnie tego szukałem. – aalsum

0

Pig podać polecenie DISTINCT, aby wybrać unikalne dane. Jeśli chcesz używać odrębnych dla pól Use Distinct w bloku zagnieżdżonym foreach.

+0

Należy zachować ostrożność podczas używania Distinct .. Wadą słowa kluczowego DISTINCT jest: Nie można mieć pewności, że tylko pierwszy rekord zostanie usunięty. –

Powiązane problemy