2016-07-27 12 views
0

Ich habe eine Frage PIG und bezieht Taschen Spalten Umwandlung Details wie folgt:Apache Pig: Converting Taschen zu Spalten.

(267720, {(201607),(201606),(201605)}, {(1),(3),(0)}) 
(806571, {(201607),(201606),(201605)}, {(28),(76),(75)}) 

ich es konvertieren möchten:

266720 201607 1 
266720 201606 3 
266720 201605 0 
806571 201607 28 
806571 201606 76 
806571 201605 75 

Ich habe versucht:

JG3 = FOREACH JG2 GENERATE company_id, flatten(date) as date, Flatten(new_hire) as newhire; 

Aber kann die genaue Übereinstimmung zwischen Datum und Newhire nicht erreichen, wird es doppelte Daten geben.

Weiß jemand wie ich das in Pig machen soll? Danke im Voraus!

Antwort

0

Auf diese Weise wird ein kartesisches Produkt aus Datum und Spalte new_hire erstellt. Wenn Sie die Kontrolle über diese Daten haben, führen Sie diese Zuordnung durch, bevor Sie Taschen erstellen. Wenn nicht, müssen Sie udf schreiben, um dieses Eins-zu-eins-Mapping zu generieren.

+0

Vielen Dank! Ich bin neu bei Pig und habe noch nie UDF verwendet. Kannst du detailliertere Informationen darüber geben, welche Art von UDF ich erstellen soll? – Jiarong

0

Verwenden ToBag()

JG3 = FOREACH JG2 GENERATE company_id, FLATTEN(TOBAG($1)), FLATTEN(TOBAG($2)); 
Verwandte Themen