2015-05-27 53 views
1
org.apache.avro.UnresolvedUnionException: Not in union ["null",{"type":"enum","name":"document_change_type","namespace":"document","symbols":["create","update","delete"]}]: create 

我傳遞字符串create這個字段,它是拋出上述異常。麻煩編碼avro枚舉與null默認

create是枚舉的3個可接受的值之一,是什麼導致異常?

回答

5

假設你的Avro的模式看起來這樣:

{ 
    "type" : "record", 
    "namespace" : "document", 
    "name" : "document_details", 
    "fields" : [ 
       { "name" : "documentName" , "type" : "string" }, 
       {"name" : "documentChange" , 
         "type" : ["null", 
            {"type" : "enum", 
            "namespace" : "document", 
            "name" : "documentChangeType",         
            "symbols" :["create","update","delete"] 
            }] 
       }    
      ] 
} 

您可以在代碼中創建記錄此架構爲:

GenericRecord documentDetailsRecord = new GenericData.Record(schema); 
    GenericEnumSymbol enumSymbol = new GenericData.EnumSymbol(schema.getField("documentChange").schema().getTypes().get(1), "create"); 
    e2.put("documentName", "someDocumentName"); 
    e2.put("documentChange",enumSymbol); 

你可以得到的架構的列表的所有字段工會如下:

schema.getField(<unionFieldName>).schema().getTypes()