Как мне написать java.util.map в avro? В GenericData я вижу записи для записи и т. Д., Но не для карты. Тот же вопрос есть на http://apache-avro.679487.n3.nabble.com/How-to-write-an-AVRO-map-Something-like-GenericData-Map-td3407527.html, но я не понимаю, как именно это было сделано.

0
Zxcv Mnb 24 Фев 2016 в 15:02

2 ответа

Лучший ответ

Avro напрямую использует java.util.HashMap. Его не нужно преобразовывать в другой тип. В частности, не существует класса GenericData, представляющего карту, поэтому вы просто помещаете свой HashMap прямо в GenericRecord.

Все преобразования Avro в Java перечислены в таблице в этом ответе. Обратите внимание, что классы GenericData необходимы для типов record, enum, array и fixed, но не для map.

5
Community 23 Май 2017 в 11:54

Карту можно определить в 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" } }
    ]
}
2
Amod Pandey 27 Фев 2016 в 21:21