gpt4 book ai didi

java - 可以使用复杂的对象类型作为 Avro 中映射的键吗?

转载 作者:行者123 更新时间:2023-11-30 05:23:30 24 4
gpt4 key购买 nike

是否可以使用非字符串作为 Avro 映射中的键?

我发现了这个问题AVRO-680它声称添加了非字符串键支持,但我找不到任何示例,也无法从补丁中找出新支持如何与架构一起使用。

我想做这样的事情:

    "name": "aThing",
"type": "record",
"fields": [
{ "name": "aMapOfThings", "type": {
"type": "map", "keys": "MyKeyType", "values": "MyValueType"
}
}
]

或者在avdl中:

  record aThing {
map<MyKeyType, MyValueType> aMapOfThings = [:];
}

就像protobuf的这个问题:Protobuf objects as Keys in Maps

最佳答案

从 PR 来看,此增强功能实际上并不是为与 SpecificRecord 一起使用而设计的。看起来代码更改和测试主要集中在 GenericRecord 上,并通过从包含带有非字符串键的映射的 Java 类反射来派生模式信息。

下面是从 POJO 派生的模式示例,其中包含非字符串键的 Map(来自 TestNonStringMapKeys.java )。请注意,它是一个记录数组,而不是 map 类型:

{
"type" : "record",
"name" : "Company",
"namespace" : "org.apache.avro.reflect",
"fields" : [ {
"name" : "employees",
"type" : [ "null", {
"type" : "array",
"items" : {
"type" : "record",
"name" : "Pair487429dd20c65898",
"fields" : [ {
"name" : "key",
"type" : {
"type" : "record",
"name" : "EmployeeId",
"fields" : [ {
"name" : "id",
"type" : [ "null", "int" ],
"default" : null
} ]
}
}, {
"name" : "value",
"type" : {
"type" : "record",
"name" : "EmployeeInfo",
"fields" : [ {
"name" : "name",
"type" : [ "null", "string" ],
"default" : null
} ]
}
} ]
},
"java-class" : "java.util.HashMap"
} ],
"default" : null
} ]
}

关于java - 可以使用复杂的对象类型作为 Avro 中映射的键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59107844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com