[英]How can I get Avro SchemaBuilder to build a schema of a map between two 'records'?
嘗試序列化 Java 表示為 Map 的對象。 這需要我先構建一個 Avro Schema。 我正在使用 Avro SchemaBuilder生成模式。 已經成功地為 Map 的對象生成模式。 但是無法處理整體 Map 的架構構建。 最終架構應如下所示(手動創建此架構):
{
"type": "record",
"name": "MapObject",
"namespace": "test",
"fields": [
{
"name": "CacheMap",
"type": {
"type": "map",
"values": [
{
"type": "record",
"name": "User",
"namespace": "test",
"fields": [
{
"name": "id",
"type": "long"
},
{
"name": "status",
"type": "string"
}
]
},
{
"type": "record",
"name": "UserKey",
"namespace": "test",
"fields": [
{
"name": "key",
"type": "long"
},
{
"name": "keyPrint",
"type": "string"
}
]
}
]
}
}
]
}
如何在 SchemaBuilder 中將 map 的鍵和值傳遞給不同的記錄? SchemaBuilder.map().values()
不允許傳遞多個 Schema 作為.value()
的參數。
Apache Avro Unions可以在這里提供幫助。
SchemaBuilder.builder()
.map()
.values(SchemaBuilder.unionOf().type(firstSchema).and().type(secondSchema).endUnion());
其中firstSchema
和secondSchema
是已為所需的 User 和 UserKey 'records' 定義的單獨模式(考慮問題中的模式)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.