2016-04-29 3 views
0

Ich habe einen Datensatz, wiePig: Das erste Vorkommen einer Variablen in einer Gruppe (bei der Aggregation anderer Variablen)?

gr col1 col2 
A  2 'haha' 
A  4 'haha' 
A  3 'haha' 
B  5 'hoho' 
B  1 'hoho' 

sieht aus, als Sie in jeder Gruppe sehen können, gr gibt es eine numerische Variable col1 und einige String-Variable col2, die gleich in jeder Gruppe ist.

Wie kann ich den folgenden Pseudo-Code in PIG bekommen?

foreach group gt : generate the mean of col1 and get the first occurrence of col2 

so würde Ausgabe aussehen

gr mean name 
A  3 'haha' 
B  3 'hoho' 

Dank!

Antwort

1

GROUP BY gr, col2 und bekommen die AVG von col1. Angenommen, die Felder sind tabulatorgetrennt.

PigScript

A = load 'test6.txt' USING PigStorage('\t') as (gr:chararray,col1:int,col2:chararray); 
B = GROUP A BY (gr,col2); 
C = FOREACH B GENERATE FLATTEN(group) as (gr,name),AVG(A.col1) as mean; 
DUMP C; 

Hinweis: wenn Sie sie in der gewünschten Reihenfolge dann zusätzlichen Schritt hinzufügen

D = FOREACH C GENERATE $0 as gr,$2 as mean,$1 as name; 

Ausgabe

Output

+0

e Danke, danke! Könntest du einfach erklären, was der FLATTEN-Operator hier macht? –

+1

@Noobie Es ist die Gruppe zu den Feldern gr, Name zu entkoppeln, da wir die Daten auf diesen beiden Feldern gruppiert haben.Wenn Sie don; t dann werden Sie sehen (A, 'haha') als 1 Feld. –

+0

oh jetzt sehe ich deinen 'gr, col2' Trick. gut gespielt. Vielen Dank! –

Verwandte Themen