2016-06-09 9 views
1

Ich habe ein Problem beim Gruppieren von Daten mit Apache-Schwein.Pig Gruppe von zwei Feldern ergibt seltsames Ergebnis

Laden von Daten mit:

client_trace_send = LOAD '/user/hduser1/adm_project/client_trace50.csv' using PigStorage(',') as (code:chararray, client_id:int, loc_ts:int, length:int, op:chararray, err_code:int, time:long, thread_id:INT); 

Begrenzung * und Prüfungsdaten:

client_trace_send_small = LIMIT client_trace_send 10; 
DUMP client_trace_send_small; 

Daten geladen:

(msg_snd,0,1,46,enrol_req,-1,1414250523591,9) 
(res_rcv,0,1,25,enrol_resp,,1414250523655,9) 
(msg_snd,1,2,48,query_queue,-1,1414250523655,9) 
(res_rcv,1,2,14,err,19,1414250523661,9) 
(msg_snd,1,3,59,peek_req,-1,1414250523661,9) 
(res_rcv,1,3,13,err,0,1414250523662,9) 
(msg_snd,1,4,59,peek_req,-1,1414250523662,9) 
(res_rcv,1,4,13,err,0,1414250523663,9) 
(msg_snd,1,5,59,peek_req,-1,1414250523663,9) 

Nun möchte ich zu einer Gruppe die Daten über die Felder „client_id "und" loc_ts ".

GROUPED = GROUP client_trace_send_small by (client_id,loc_ts); 

Überprüfen Sie das Ergebnis:

DUMP GROUPED; 

Und seine seltsam:

((0,1),{(msg_snd,0,1,46,enrol_req,-1,1414250523591,9)}) 
((1,2),{(msg_snd,1,2,48,query_queue,-1,1414250523655,9)}) 
((1,3),{(msg_snd,1,3,59,peek_req,-1,1414250523661,9)}) 
((1,4),{(msg_snd,1,4,59,peek_req,-1,1414250523662,9)}) 
((1,5),{(msg_snd,1,5,59,peek_req,-1,1414250523663,9)}) 
((8,28493),{(msg_snd,8,28493,62,pop_req,-1,1414251764157,16)}) 
((9,25976),{(msg_snd,9,25976,66,query_sender,-1,1414251764148,17)}) 
((19,28250),{(msg_snd,19,28250,64,pop_req,-1,1414251764152,27)}) 
((31,27977),{(msg_snd,31,27977,65,peek_req,-1,1414251764152,39)}) 

Es gibt Werte vorhanden, die auch in den geladenen Daten erscheinen nicht. Für die erste Gruppe ich so etwas wie erwartet:

((0,1),{(msg_snd,0,1,46,enrol_req,-1,1414250523591,9),{(res_rcv,0,1,25,enrol_resp,,1414250523655,9)}) 

Was falsch ist hier los?

Ich schätze Ihre Hilfe, danke im Voraus.

Mit freundlichen Grüßen

+0

Sie dumpten 'client_trace_send_small' und gruppierten' send_small'! – 54l3d

+0

Hoppla! Entschuldigung, das ist ein Fehler beim Kopieren und Einfügen. Ich habe tatsächlich client_trace_send_small gruppiert. Sonst hätte ich einen Fehler in der Grunt-Konsole erhalten, da send_small nicht existiert. – Redo

+0

Bearbeiten Sie Ihre Frage bitte, damit sie für andere verständlich ist. – 54l3d

Antwort

0

Dies liegt daran, LIMIT einen zufälligen Satz von Daten übernehmen:

Es gibt keine Garantie, die Tupel zurückgegeben werden, und die Tupel , die von einem Laufe ändern zu zurückgegeben werden können der nächste.

Und weil es zwei DUMP in Ihrem scipt ist daher die Pipeline in zwei Pipelines Schwein wird aufgeteilt, die jeweils eine LIMIT separat ausgeführt werden. Daher erhalten Sie zwei verschiedene Datensätze für jede Sub-Pipeline.

Aber alles, worüber wir uns sicher sind, ist, dass gedumpte Daten offensichtlich aus der Eingabedatei stammen und sie kommen aus maximal 10 Zeilen (< 10, wenn die Datei weniger Zeilen hat).

Sie können Ihre explain planen und es ist explanation.

+0

Oh Schande. Danke vielmals! – Redo

Verwandte Themen