Apache Avro:map使用CharSequence作为键

2022-09-03 17:52:01

我正在使用Apache Avro

我的架构具有映射类型:

{"name": "MyData", 
  "type" :  {"type": "map", 
              "values":{
                   "type": "record",
                   "name": "Person",
                   "fields":[
                      {"name": "name", "type": "string"},
                      {"name": "age", "type": "int"},

                ]
                }
               }
}

编译模式后,生成的 Java 类将 用作 .CharSequenceMapMyData

在中用作密钥是非常不方便的,有没有办法在Apache Avro中生成类型密钥?CharSequenceMapStringMap

附言

问题是,例如,即使那里有这样的密钥,也会返回,只是因为它是 。此外,使用现有键放置映射条目不会与旧键相关。这就是为什么我说它不方便用作密钥。dataMap.containsKey("SOME_KEY")falseCharSequenceCharSequence


答案 1

这个JIRA讨论是相关的。仍在使用的CharSequence的要点是向后兼容性

正如Charles Forsythe所指出的那样,通过在架构中设置字符串属性,已经添加了一个解决方法,用于何时需要String。

 { "type": "string", "avro.java.string": "String" }

这里的默认类型是他们自己的 Utf8 类。除了手动规范和pom.xml设置之外,它甚至还有一个avro工具编译选项,该选项:-string

java -jar avro-tools.1.7.5.jar compile -string schema /path/to/schema .

答案 2

显然,在Avro 1.6中有解决此问题的方法。您可以在项目的 POM 文件中指定字符串类型:

  <stringType>String</stringType>

本期中提到的这是AVRO-803 ...尽管插件的Web文档没有反映这一点。


推荐