可以在Avro中将复杂的对象类型用作地图中的键吗?

是否可以在具有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

jianghuic705 回答:可以在Avro中将复杂的对象类型用作地图中的键吗?

从PR来看,此增强功能并不是专门为SpecificRecord设计的。看起来,代码更改和测试集中在GenericRecord上,并通过反射从包含非字符串键的map的Java类中得出模式信息。

下面是从POJO派生的模式的示例,该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","int" ],"default" : null
            } ]
          }
        },{
          "name" : "value","name" : "EmployeeInfo","fields" : [ {
              "name" : "name","string" ],"default" : null
            } ]
          }
        } ]
      },"java-class" : "java.util.HashMap"
    } ],"default" : null
  } ]
}
本文链接:https://www.f2er.com/3006288.html

大家都在问