Question

I haven't found anything in the documentation about this, only generic bla about default values. My assumption was that it should work like this:

enum MyEnum {
   UNSPECIFIED,
   SPECIFIED
}

record Test {
   MyEnum e = "UNSPECIFIED";
}

The GenericDatumReader in Java unfortunately complains that he is finding a String but expects a MyEnum.

Can anyone confirm that this is the correct way to use a enum with a default value using avro IDL? In that case I have a bug elsewhere. Can anyone confirm that this is not the way to do it and correct me? Any input is appreciated!

Update: In my real world version of this, it seems that a newly added enum to the record is causing the issue even though it has a default value. This means that my reader schema expects an enum, whereas the record does not contain one. Schema evolution should be able to resolve this, but seems to fail. More detail: I am working with Pig here, not direct Java.

Was it helpful?

Solution

Ok, turns out this is indeed the correct way to specify a default value for an enum in an avro IDL. In my case a union {null, string} had been replaced by an enum causing all the trouble. So remember: do not change the type of a field in avro!

OTHER TIPS

I do not know avro IDL but if you are sure 'record` syntax, you may use this code to convert your String to your enum type

MyEnum e = Enum.valueOf(MyEnum.class, "UNSPECIFIED")
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top