Загрузить файл вложенного паркета в Pig?

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

  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 на рис.

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

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

person Mangat Rai Modi    schedule 28.03.2016    source источник


Ответы (1)


Правильный способ доступа - использовать оператор ., как показано в пункте 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 сами по себе представляют собой набор кортежей, где каждый элемент массива является кортежем.

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

person Mangat Rai Modi    schedule 29.03.2016