2016-03-28 1 views
0

Файл паркета создается из файла Avro. Теперь мне нужно загрузить файл Parquet в Pig. Ниже приведена схема, которую я получил от команды parquet-tools schema.Загрузите файл вложенного паркета в Pig?

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); 
} 

Теперь я не могу понять эквивалентную схему свиньи, чтобы загрузить этот файл. Я использую parquet.pig.ParquetLoader. Я сделал следующие преобразования: -

  1. массива будет загружен в chararray
  2. как загружать вложенные данные? bid_info.creative_id не работает: mismatched input '.' expecting RIGHT_PAREN
  3. Я загружаю все поля, необязательно или нет. Необязательные значения должны быть загружены как null в Pig.

Я также попытался с помощью простой загрузки без какой-либо явной схемы, то я получил эту ошибку:

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

ответ

0

Правильный способ доступа заключается в использовании . оператора, как показано в п-2 вопроса. Это не сработало от меня, потому что я использовал parquet.pig.ParquetLoader(). Паркет для свиней теперь был принят Apache и имеет максимальную поддержку, поэтому я использовал банки от maven и использовал org.apache.parquet.pig.ParquetLoader() в качестве парсера. Работает следующий код: -

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

req_parquet будет кортежем, состоящим из 5 полей (Super1-5). Поля Super1,2,3 сама по себе является кортежем. Super1.Field1 и Super1.Field2 сам по себе является сумкой кортежей, где каждый элемент массива является кортежем.

Это довольно сложный, но сработавший для меня.