PIG: Невозможно привести java.lang.String к org.apache.avro.util.Utf8 с AvroStorage внутри STORE.

1

Я использую Apache PIG для сокращения данных, первоначально сохраненных в формате CSV, и хочу вывести их в Avro. Часть моего скрипта PIG вызывает java UDF, который добавляет несколько полей во входной Tuple и передает измененный Tuple. При этом я изменяю вывод, PIG, схему, используя:

Schema outSchema = new Schema(input).getField(1).schema;
Schema recSchema = outSchema.getField(0).schema;
recSchema.add(new FieldSchema("aircrafttype", DataType.CHARARRAY));

Внутри public Schema outputSchema(Schema input) моего UDF.

В рамках метода exec я добавляю значения java.lang.String к входному Tuple и возвращаю отредактированный Tuple в скрипт PIG. Это и все последующие операции работают нормально. Если я PigStorage(',') формат CSV с помощью PigStorage(','), проблем нет. Когда я пытаюсь выполнить вывод, используя

STORE records INTO '$out_dir' USING org.apache.pig.piggybank.storage.avro.AvroStorage('
{
"schema":{ 
  "type":"record", "name":"my new data",
  "fields": [
    {"name":"fld1", "type":"long"},
    {"name":"fld2", "type":"string"}
  ]}
}');

Я получаю следующую ошибку:

java.io.IOException: java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.avro.util.Utf8

Я попытался добавить поля символов в Tuple (внутри моего UDF) в виде char[] и Utf8, но это делает PIG сердитым, прежде чем я даже Utf8 записать данные. Я также попытался изменить мою схему Avro, чтобы допускать нулевые типы в каждом поле.

Я использую PIG v0.11.1 и Avro v1.7.5, любая помощь очень ценится.

Теги:
hadoop
avro
apache-pig

1 ответ

0
Лучший ответ

Это была проблема с версией PIG. Мой UDF был встроен в jar-with-dependencies, включая PIG v0.8.1. Смешение PIG версий 0.8.1 и 0.11.1 вызывало проблемы, AVRO не имел к этому никакого отношения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню