java - 如何让 Avro SchemaBuilder 在两个“记录”之间构建映射模式?
问题描述
尝试序列化表示为 Map 的 Java 对象。这需要我先构建一个 Avro Schema。我正在使用 Avro SchemaBuilder生成模式。已经成功地为 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 中将映射的键和值传递给不同的记录?
SchemaBuilder.map().values()
不允许将多个 Schema 作为参数传递给.value()
.
解决方案
Apache Avro Unions可以在这里提供帮助。
SchemaBuilder.builder()
.map()
.values(SchemaBuilder.unionOf().type(firstSchema).and().type(secondSchema).endUnion());
其中 thefirstSchema
和 thesecondSchema
是已经为所需的 User 和 UserKey 'records' 定义的单独模式(考虑问题中的模式)
推荐阅读
- android - Proguard minifyEnabled True 应用程序未按预期工作
- sql - 显示距离路线 5 公里处的所有标记
- firebase - 如何为 Firebase 创建 APNS 有效负载?
- ios - Intellij 为 Kotlin 多平台生成的项目总是显示构建失败
- amazon-web-services - 本地应用程序是否可以将消息直接推送(发布)到 AWS Eventbridge /EventBus?
- ms-access - 控件无法编辑;它绑定到自动编号字段
- python - 安装 dlib windows 10 期间的错误
- python - 有没有办法使用函数在最密集的点区域上绘制一个最小尺寸的正方形?
- windows - 如何在 PowerShell 5 中更改字体属性?
- macos - Cassandra 启动(在 mac os 中):启动 cassandra 时无法创建 java 虚拟机