python - 如何为 avro 联合类型指定数据而没有歧义?
问题描述
我正在使用 Python 的官方 avro 库,版本 1.8.2 编写一个 Python 程序。
这是一个简单的模式来显示我的问题:
{
"type": "record",
"namespace": "com.example",
"name": "NameUnion",
"fields": [
{
"name": "name",
"type": [
{
"type": "record",
"namespace": "com.example",
"name": "FullName",
"fields": [
{
"name": "first",
"type": "string"
},
{
"name": "last",
"type": "string"
}
]
},
{
"type": "record",
"namespace": "com.example",
"name": "ConcatenatedFullName",
"fields": [
{
"name": "entireName",
"type": "string"
}
]
}
]
}
]
}
此模式的可能基准是{"name": {"first": "Hakuna", "last": "Matata"}}
和{"name": {"entireName": "Hakuna Matata"}}
。
然而,这给歧义留下了余地,因为并非总是 avro 能够检测到联合中指定的正确模式。在这种情况下,任何一个数据都将对应于 1 个且只有 1 个有效模式,但可能存在联合中超过 1 个模式有效的情况。
我想知道是否可以使用类似 的数据{"name": {"FullName": {"first": "Hakuna", "last": "Matata"}}}
,其中在数据中指定了特定的联合模式名称。
可能吗?怎么做?
解决方案
经过大量研究,我发现包含有关类型信息的表示是Avro JSON encoding standard。
不幸的是,在我撰写本文时,官方 python 库和 fastavro 都不支持这一点。
推荐阅读
- r - 如何解释这条不从零开始的 ROC AUC 曲线
- java - JMockit 模拟铸造
- python - 如何使用 tkinter 在我的 python 脚本中调用 tcl 命令?
- c# - 在 c# 中检查是否存在带有 json 响应正文的属性值
- linux - 每次集群启动时运行 SQL
- reinforcement-learning - 双深度 Q 学习中的 Q 值过冲
- leaflet - 使用传单在屏幕上有多个地图,想将其修复为单个
- laravel - 无法打开流或文件“/Applications/XAMPP/xamppfiles/htdocs/apcjobs/storage/logs/laravel-2020-06-06.log”:
- java - 为什么我的自定义 JPanel 没有被绘制/重新绘制,即使我正在从事件队列中绘制并覆盖 paintComponent()?
- flutter - 使用 Flutter 将图像拖到另一个图像之上