2016-05-20 10 views
0

Ich versuche, meine Daten zu gruppieren und in hdfs mit einem Ordner für jeden 'Name' und Unterordner für jeden 'YearMonth' unter jedem Namensordner zu speichern.Um Multistorage für jede Gruppe in Pig zu verwenden

Eingang:

(Date)  (name)   (col3)  (col4) 

2015-02-02 abc    y   z 

2016-01-02 xyz    i   j 

2015-03-02 abc    f   b 

2015-02-06 abc    y   z 

2016-03-02 xyz    a   q 

in hdfs Erwartet aus:

abc Ordner

->201502 subfolder 

     2015-02-02 abc    y   z 

     2015-02-06 abc    y   z 

->201503 subfolder 

     2015-03-02 abc    f   b 

xyz Ordner

->201601 subfolder 

     2016-01-02 xyz    i   j 

->201603 subfolder 

     2016-03-02 xyz    a   q 

Ich bin mir nicht sicher, wie die Option Multistorage in der Spalte Name verwendet wird, nachdem die Tupel nach Datum gruppiert wurden.

Antwort

0

ersten beiden Beziehungen schaffen namentlich durch Filtern

Sie Teilzeichenfolge können ein neues Feld für DATE Unterordner

CONCAT(SUBSTRING($0,0,4),SUBSTRING($0,5,7) 

nun dieses Feld als Ordnernamen in MultiStorage erstellen verwenden

+0

Ich habe eine große Reihe von Daten, die Millionen von Zeilen und mehr als 100 Namen. Können Sie mir vorschlagen, was ich in einem solchen Szenario tun kann? Vielen Dank im Voraus. – dreddy

+0

Da Sie mehrere Ebene des Ordners (eins für Name und eins für Datum) möchten. Filtern und dann die einzige Option verwenden. Andere Optionen bestehen darin, eine Zeichenfolge mit Datum zu erstellen und etwas wie "xyz/201503" zu benennen und es an mutiStorage als Ordnernamen weiterzugeben, nicht sicher, ob das funktioniert. –

+0

Ich benutze zweimal Split und dann MutiStorage darüber. Aber zu viele Multispeicher-Befehle Gibt es eine Möglichkeit, dies zu loopen? – dreddy

0

Wenn Sie haben HCatalog Sie können folgenden Schritten folgen:

  1. C partitionierten Tabelle reate wie unten HCatalog mit

    HCAT -e "erstellen externe Tabelle TABLE_NAME (col3 string, col4 string) partitioniert von (Datum String name string) Standort '/ user/$ USER/multi_partition'"

  2. Laden Sie Daten in diese Tabelle mit folgenden Pig-Anweisungen:

    A = 'Input.dat' mit PigStorage() laden als (Datum: Chararray, Name: Chararray, Col3: Chararray, Col4: Chararray);

    STORE A IN 'TABLE_NAME' mit org.apache.hive.hcatalog.pig.HCatStorer();