2016-03-28 9 views
0

Ich habe eine Beziehung, die 7 Felder enthält und in unteren Ausgabe konvertieren möchten.Unterstützung für die Umwandlung der Tupel zu Elementen in PIG

Eingang:

(x,y,10,z,20,a,30) ->(chararray,chararray,double,chararray,double,chararray,double) 

Output wie unten sein sollte ..

(x,y,10) 
(x,z,20) 
(x,a,30) 

Könnten Sie bitte jemand wissen, wie dies zu erreichen .....

+0

Willkommen bei SO - wenn Sie echte Hilfe erhalten möchten, teilen Sie so viele Informationen und was Sie bisher versucht haben. Also - bitte teile, was die Logik der Spaltung ist, auch was hast du bis jetzt versucht. Haben Sie darüber nachgedacht, UDF zu verwenden, die Tupel und Retourenbeutel enthalten? – Mzf

+0

Ich möchte nicht UDF verwenden. Ich habe versucht, die Umwandlung in Tasche, aber ich fand nicht erforderliche Ergebnisse ... – Devndra

+0

können Sie teilen, was haben Sie versucht? teilen Sie auch die Logik - wenn es für alle Aufzeichnungen repariert? Wenn ja - lesen Sie diese https://pig.apache.org/docs/r0.10.0/basic.html#relations – Mzf

Antwort

1

Sie verwendet haben die richtige Funktion TOBAG.TOBAG (*) bedeutet, dass TOBAG auf alle Felder angewendet wird. CONCAT die Felder, die in Zeilen konvertiert werden müssen, und dann FLATTEN die verketteten Felder.

Hinweis: Sie verwenden double für einige Felder, so dass Sie Dezimalstellen mit den doppelt geladenen Feldern sehen.

A = LOAD 'test7.txt' USING PigStorage(',') AS (f1:chararray,f2:chararray,f3:double,f4:chararray,f5:double,f6:chararray,f7:double); 
B = FOREACH A GENERATE f1,FLATTEN(TOBAG(CONCAT(f2,CONCAT(',',(chararray)f3)),CONCAT(f4,CONCAT(',',(chararray)f5)),CONCAT(f6,CONCAT(',',(chararray)f7)))); 
DUMP B; 

Output

+0

Danke. Dies gibt die (y, 10.0) als chararray.Hier möchte ich dies zwei Felder sein und sie sind chararray (y) und doulbe (10.0). Weil ich die Werte basierend auf einer Bedingung filtern möchten. – Devndra

+0

@Devndra Fügen Sie einen weiteren Schritt hinzu, um die Felder in den Datentyp Ihrer Wahl zu konvertieren.C = FOREACH B GENERATE $ 0, $ 1, (double) $ 2; –

Verwandte Themen