首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Apache : map使用CharSequence作为密钥

Apache : map使用CharSequence作为密钥
EN

Stack Overflow用户
提问于 2013-11-01 14:33:18
回答 6查看 10.8K关注 0票数 15

我正在使用阿帕奇·阿夫罗

我的模式有映射类型:

代码语言:javascript
运行
复制
{"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作为密钥是不方便的。

EN

回答 6

Stack Overflow用户

发布于 2013-11-08 21:36:13

这次JIRA讨论是相关的。目前仍在使用的backwards-compatability.是CharSequence的主要用途。

正如Charles所指出的,通过在架构中设置String属性,已经为需要字符串的时候添加了一个解决方案。

代码语言:javascript
运行
复制
 { "type": "string", "avro.java.string": "String" }

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

代码语言:javascript
运行
复制
java -jar avro-tools.1.7.5.jar compile -string schema /path/to/schema .
票数 12
EN

Stack Overflow用户

发布于 2013-11-01 15:04:28

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

代码语言:javascript
运行
复制
  <stringType>String</stringType>

这是在这个问题上提到的阿夫罗-803 .尽管插件的网络文档并没有反映这一点。

票数 9
EN

Stack Overflow用户

发布于 2013-11-01 15:02:06

显然,默认情况下,Avro使用CharSequence。我找到了String

从Avro 1.6.0到String,有一个选项让Avro始终执行到String的转换。有几种方法可以实现这一点。第一个方法是将模式中的avro.java.string属性设置为String:

代码语言:javascript
运行
复制
         { "type": "string", "avro.java.string": "String" }

我还没测试过这个。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19728853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档