我正在使用阿帕奇·阿夫罗。
我的模式有映射类型:
{"name": "MyData",
"type" : {"type": "map",
"values":{
"type": "record",
"name": "Person",
"fields":[
{"name": "name", "type": "string"},
{"name": "age", "type": "int"},
]
}
}
}编译模式后,已生成的Java类使用CharSequence作为Map MyData的键。
在CharSequence中使用Map作为密钥是非常不方便的,是否有一种在阿帕奇·阿夫罗中为Map生成String类型键的方法?
P.S.
问题是,例如,dataMap.containsKey("SOME_KEY")将返回false,即使存在这样的键,仅仅因为它是CharSequence。此外,使用现有键放置一个地图条目并不能重新调整旧键的空间。这就是为什么我说使用CharSequence作为密钥是不方便的。
发布于 2013-11-08 21:36:13
这次JIRA讨论是相关的。目前仍在使用的backwards-compatability.是CharSequence的主要用途。
正如Charles所指出的,通过在架构中设置String属性,已经为需要字符串的时候添加了一个解决方案。
{ "type": "string", "avro.java.string": "String" }这里的默认类型是它们自己的Utf8类。除了手动规范和pom.xml设置之外,甚至还有一个avro-tools编译选项,即-string选项:
java -jar avro-tools.1.7.5.jar compile -string schema /path/to/schema .发布于 2013-11-01 15:04:28
显然,在Avro 1.6中有一个解决这个问题的方法。在项目的POM文件中指定字符串类型:
<stringType>String</stringType>这是在这个问题上提到的阿夫罗-803 .尽管插件的网络文档并没有反映这一点。
发布于 2013-11-01 15:02:06
显然,默认情况下,Avro使用CharSequence。我找到了String
从Avro 1.6.0到String,有一个选项让Avro始终执行到String的转换。有几种方法可以实现这一点。第一个方法是将模式中的avro.java.string属性设置为String:
{ "type": "string", "avro.java.string": "String" }我还没测试过这个。
https://stackoverflow.com/questions/19728853
复制相似问题