使用null默认值编码avro枚举时出现问题

3
org.apache.avro.UnresolvedUnionException: Not in union ["null",{"type":"enum","name":"document_change_type","namespace":"document","symbols":["create","update","delete"]}]: create

我正在为此字段传递字符串create,但它会引发上述异常。

create是枚举中3个可接受的值之一,是什么导致了异常?

1个回答

7
假设您的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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接