2013-07-25 6 views
5

Я ничего не нашел в документации по этому поводу, только общие значения значений по умолчанию. Мое предположение было то, что он должен работать так:Как указать значение по умолчанию для перечисления с использованием avro IDL?

enum MyEnum { 
    UNSPECIFIED, 
    SPECIFIED 
} 

record Test { 
    MyEnum e = "UNSPECIFIED"; 
} 

GenericDatumReader в Java, к сожалению, жалуется, что он находит строку, но ожидает MyEnum.

Может ли кто-нибудь подтвердить, что это правильный способ использования перечисления со значением по умолчанию с использованием avro IDL? В этом случае у меня есть ошибка в другом месте. Может ли кто-нибудь подтвердить, что это не способ сделать это и исправить меня? Любой вход оценивается!

Обновление: В моей реальной версии этой версии кажется, что недавно добавленное перечисление к записи вызывает проблему, даже если она имеет значение по умолчанию. Это означает, что моя схема чтения ожидает перечисления, тогда как запись не содержит ее. Эволюция схемы должна быть в состоянии разрешить это, но, похоже, терпит неудачу. Подробнее: Я работаю с Pig здесь, а не напрямую Java.

ответ

3

Ok, оказывается, что это действительно правильный путь для указания значения по умолчанию для перечисления в IDL avro. В моем случае объединение {null, string} было заменено перечислением, вызывающим все проблемы. Поэтому помните: не изменяйте тип поля в avro!

0

Я не знаю Avro IDL, но если вы уверены, что «синтаксис record`, вы можете использовать этот код, чтобы преобразовать строку в ваш тип перечислений

MyEnum e = Enum.valueOf(MyEnum.class, "UNSPECIFIED") 
+0

Спасибо за ответ, но это не вариант для меня, поскольку я зависим от эволюции схемы avro (которая, похоже, не работает для недавно добавленного enum прямо сейчас). – LiMuBei

 Смежные вопросы

  • Нет связанных вопросов^_^