2016-03-28 9 views
0

Eine Parkettdatei wird aus einer Avro-Datei erstellt. Jetzt muss ich die Parkettdatei in Pig laden. Folgendes ist das Schema, das ich von parquet-tools schema Befehl erhalten habe.Geschachtelte Parkettdatei in Pig laden?

message Logs { 
    optional group SUPER1 { 
    optional group FIELD1 (LIST) { 
     repeated int32 array; 
    } 
    optional group FIELD2 (LIST) { 
     repeated int32 array; 
    } 
    } 
    optional group SUPER2 { 
    optional int32 FIELD1; 
    optional binary FIELD2 (UTF8); 
    optional double FIELD3; 
    optional int32 FIELD4; 
    optional double FIELD5; 
    optional binary FIELD6 (UTF8); 
    } 
    optional group SUPER3 { 
    required int32 FIELD1; 
    required int32 FIELD2; 
    optional binary FIELD3 (UTF8); 
    optional binary FIELD4 (UTF8); 
    } 
    required binary SUPER4 (UTF8); 
    optional binary SUPER5 (UTF8); 
} 

Jetzt bin ich nicht in der Lage, das entsprechende Schweinschema zu verstehen, um diese Datei zu laden. Ich benutze parquet.pig.ParquetLoader. Ich habe die folgenden Transformationen: -

  1. Array würde als chararray
  2. geladen werden, wie verschachtelte Daten laden? bid_info.creative_id funktioniert nicht: mismatched input '.' expecting RIGHT_PAREN
  3. Ich lade alle Felder, ob optional oder nicht. Optionale Werte sollten in Pig als Null geladen werden.

Ich habe auch versucht, einfachen Laden ohne explizites Schema verwendet, dann habe ich diesen Fehler:

Failed to parse: Invalid list type optional group FIELD1 (LIST) { 
    repeated int32 array; 
} 

Antwort

0

Der richtige Weg, um Zugang ist . Operator zu verwenden, wie in Punkt-2 der Frage zeigte. Es funktionierte nicht von mir, weil ich parquet.pig.ParquetLoader() benutzte. Parkett für Schwein wurde jetzt von Apache übernommen und hat die maximale Unterstützung, so dass ich Gläser von maven verwendet und org.apache.parquet.pig.ParquetLoader() als Parser verwendet. Folgender Code gearbeitet: -

log_parquet = LOAD 'logs' USING org.apache.parquet.pig.ParquetLoader(); 

req_parquet ein Tupel sein wird, die 5 Felder (Super1-5). Felder Super1,2,3 selbst ist das Tupel. Super1.Field1 und Super1.Field2 selbst ist eine Tasche von Tupeln, wobei jedes Element in der Anordnung Tupel ist.

Es ist ziemlich komplex, aber arbeitete für mich.