Использование стола-улья над паркетом в программе "Свинья"

Я пытаюсь создать таблицу Hive со схемой string, string, double в папке, содержащей два файла Parquet. Схема первого паркетного файла - это строка, строка, двойная, а схема второго файла - это строка, двойная, строка.

CREATE EXTERNAL TABLE dynschema (
 trans_date string,
 currency string,
 rate double) 
STORED AS PARQUET
LOCATION '/user/impadmin/test/parquet/evolution/';

Я пытаюсь использовать таблицу улья в скрипте pig (0.14).

 A = LOAD 'dynschema' USING org.apache.hive.hcatalog.pig.HCatLoader();

DUMP A;

Но я получаю ошибку

java.lang.UnsupportedOperationException: невозможно проверить org.apache.hadoop.hive.serde2.io.DoubleWritable

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

Я также просмотрел HCatRecordReader's код и нашел этот фрагмент кода

DefaultHCatRecord dr = new DefaultHCatRecord(outputSchema.size());
  int i = 0;
  for (String fieldName : outputSchema.getFieldNames()) {
    if (dataSchema.getPosition(fieldName) != null) {
      dr.set(i, r.get(fieldName, dataSchema));
    } else {
      dr.set(i, valuesNotInDataCols.get(fieldName));
    }
    i++;
  }

Здесь я вижу, что есть логика преобразования из схемы данных в схему вывода, но во время отладки я обнаружил, что нет никакой разницы в обеих схемах.

Пожалуйста, помогите мне узнать,

  1. Pig поддерживает такие случаи чтения данных из таблицы кустов, созданной в нескольких файлах паркета с разной схемой.

  2. Если да, то как это сделать.


person SaurabhG    schedule 20.01.2016    source источник
comment
Если вы знаете схему, вы можете использовать загрузчик Parquet Pig для чтения файлов и указать схему вручную, что должно инициировать эволюцию схемы. Я не уверен, поможет ли это в данном конкретном случае, хотя эволюция схемы кажется сложной.   -  person LiMuBei    schedule 27.01.2016
comment
Будет ли так и с Avro?   -  person SaurabhG    schedule 28.01.2016
comment
Не знаю, как работает хранилище свиней авро. Я думаю, вы также можете вручную указать схему.   -  person LiMuBei    schedule 28.01.2016


Ответы (1)


Если у вас есть файлы с двумя разными схемами, представляется разумным следующее:

  1. Разделите файлы в зависимости от имеющейся у них схемы.
  2. Сделайте из них таблицы
  3. При желании загрузите отдельные таблицы и сохраните их в надтаблице.
person Dennis Jaheruddin    schedule 29.05.2016