You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by Ken Krugler <kk...@transpac.com> on 2010/11/15 01:08:35 UTC
Question about enum usage with GenericData
Hi there,
I've been looking at adding enum support to the Cascading AvroScheme,
but I'm perplexed by an error I run into.
I create an Avro Schema based on an enum class passed in from
Cascading - the result in Json looks like:
{"type":"record","name":"CascadingAvroSchema","namespace":"","fields":
[{"name":"a","type":["null",{"type":"enum","name":"AvroSchemeTest
$TestEnum","namespace":"com.bixolabs.cascading.avro","symbols":
["ONE","TWO"]}],"doc":""}]}
I'm writing out the data using code that does this:
GenericData.Record datum = new GenericData.Record(getSchema());
datum.put(fieldName, object);
Where object is set to TestEnum.ONE
But when I try to write out the result using the AvroOutputFormat, I
get:
Caused by: org.apache.avro.AvroRuntimeException: Not in union ["null",
{"type":"enum","name":"AvroSchemeTest
$TestEnum","namespace":"com.bixolabs.cascading.avro","symbols":
["ONE","TWO"]}]: ONE
at org.apache.avro.generic.GenericData.resolveUnion(GenericData.java:
372)
at
org
.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:
69)
at
org
.apache
.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:
102)
at
org
.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:
64)
at
org
.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:
56)
at org.apache.avro.file.DataFileWriter.append(DataFileWriter.java:245)
at org.apache.avro.mapred.AvroOutputFormat
$1.write(AvroOutputFormat.java:93)
at org.apache.avro.mapred.AvroOutputFormat
$1.write(AvroOutputFormat.java:90)
Any input into what I'm doing wrong? Since I'm dynamically creating
the schema based on the Cascading Tuple fields/types, I'm guessing my
schema isn't appropriate.
Thanks,
-- Ken
--------------------------
Ken Krugler
+1 530-210-6378
http://bixolabs.com
e l a s t i c w e b m i n i n g