如何在 java 中将地图写入 avro?

How to write map to avro in java?

如何将 java.util.map 写入 avro? 在 GenericData 中,我看到了 Record 等的条目,但没有看到 Map 的条目。 http://apache-avro.679487.n3.nabble.com/How-to-write-an-AVRO-map-Something-like-GenericData-Map-td3407527.html 上有同样的问题,但我不明白它是如何完成的。

Avro 直接使用 java.util.HashMap。您不需要将其转换为另一种类型。具体来说,没有 GenericData class 表示地图,因此您只需将 HashMap 直接放入 GenericRecord.

所有 Avro 到 Java 的转换都列在这个 的 table 中。请注意,GenericData class 是 recordenumarrayfixed 类型所必需的,但 map 则不需要.

可以像下面这样在 avro 中定义地图。注意,以下将不起作用

{ "name": "id", "type": "map", "values" : "long" } 

必须这样定义

{ "name": "id", "type": { "type": "map", "values" : "long" } }

例如

{
    "type": "record",
    "name": "MyData",
    "fields": [
        { "name": "id", "type": { "type": "map", "values" : "long" } }
    ]
}