java - 使用空默认值编码 avro 枚举时遇到问题

标签 java avro

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

我为该字段传入字符串 create,它抛出上述异常。

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

最佳答案

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

关于java - 使用空默认值编码 avro 枚举时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30494931/

相关文章:

Java JNLP 自签名 jar

java - 如何以编程方式在Android中制作水平线

python - 从 Kafka 轮询几条消息

java - 在 Line2D 末端用 Polygon 绘制菱形

java - Base64.encode() 不适用于大字节数组

serialization - 如何在 Avro 模式中表示重复字段?

apache-kafka - 在 Windows 中启动 Confluent Schema Registry

hadoop - 来自AVRO文件的外部Hive表说它没有数据

java - 由于底层异常导致 MySQL 通信链接失败

java - 如何在 Spark 中将数据序列化为 AVRO 模式(使用 Java)?