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