2012-07-18 14 views
9

Sto usando PigLatin per filtrare alcuni record.Rimozione di duplicati usando PigLatin

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

Lo script deve rimuovere il duplicato per gli utenti e conservare uno di questi record. Qualcosa come il comando unico in linux.

L'output dovrebbe essere:

User1 8 NYC 
User2 4 NYC 

Qualche suggerimento?

risposta

20

Per esempio particolare distinta non funziona così come l'output contiene tutte le colonne di input ($0, $1, $2), si può fare distinti solo su una proiezione che ha colonne ($0, $2) o ($0) e perdere $1.

Per selezionare un record per utente (qualsiasi record) è possibile utilizzare uno GROUP BY e uno FOREACH nidificato con LIMIT. Es:

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

Questo approccio vi aiuterà a ottenere i record che sono unici su un sottoinsieme di campi e anche limitare il numero di record di output per ogni utente, che è possibile controllare.

+0

Grazie, è esattamente quello che stavo cercando. – aalsum

0

Pig fornisce il comando DISTINCT per selezionare dati univoci. Se si desidera utilizzare distinti nei campi Utilizzare Distinto in blocco nidificato foreach.

+0

Fai attenzione mentre usi Distinto. Lo svantaggio con la parola chiave DISTINCT è: Non puoi essere sicuro che solo il primo record verrà rimosso. –

Problemi correlati