我在文档中没有找到任何关于此的内容,只有关于默认值的泛型bla。我的假设是它应该像这样工作:
enum MyEnum {
UNSPECIFIED,
SPECIFIED
}
record Test {
MyEnum e = "UNSPECIFIED";
}
Java中的GenericDatumReader不幸地抱怨他正在寻找一个字符串,但期望一个MyEnum。
任何人都可以确认这是使用avro IDL使用默认值枚举的正确方法吗?在那种情况下我在其他地方有一个错误。 任何人都可以确认这不是这样做的方法并纠正我吗? 任何意见都表示赞赏!
更新: 在我的真实世界版本中,似乎记录中新添加的枚举导致问题,即使它具有默认值。这意味着我的读者架构需要枚举,而记录不包含枚举。模式演变应该能够解决这个问题,但似乎失败了。 更多细节:我在这里与Pig合作,而不是直接Java。
答案 0 :(得分:3)
好的,事实证明这确实是为avro IDL中的枚举指定默认值的正确方法。在我的例子中,union {null,string}已被枚举替换,导致所有麻烦。所以请记住:不要改变avro中字段的类型!
答案 1 :(得分:0)
我不知道avro IDL,但如果您确定'record`语法,则可以使用此代码将String转换为枚举类型
MyEnum e = Enum.valueOf(MyEnum.class, "UNSPECIFIED")