python - 当消息包含多个消息时编译 avro 模式(python)

标签 python avro

我使用 import avro 等在 python 中编译 avro 模式。有时,我的 avro 架构将如下所示:

{ name: "Message1" ..... }

{ name: "Message2", "fields": [ { "type": "Message1", "name": "previous_avro_schema" } ] } ...

请忽略错别字。我只是想传达信息。要点是我有两个 avro 模式。其中一个 avro 模式使用第二个 avro 模式作为其字段之一。如何为此类 avro 消息调用 avro.schema.parse(....) 以便正确编译它们?

最佳答案

Avro 的 Python 支持非常可怜,但您可以同时使用一些东西,包括多个模式。您只需要将模式文件合并到一个文件中,您需要确保它们以正确的顺序合并,以便依赖项排在第一位,并且您需要用实际模式替换名称这是我使用的脚本合并它们:

def resolve(path):
    "fully resolve a schema that includes other schemas"
    data = open(path).read()
    # fill in any while they remain
    while True:
        beg = data.find('`')
        end = data.find('`', beg + 1)
        if beg < 0:
            break
        path = os.path.join(os.path.dirname(path), data[beg+1:end] + '.avsc')
        data = data[:beg] + resolve(path) + data[end+1:]
    return data

关于python - 当消息包含多个消息时编译 avro 模式(python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9071918/

相关文章:

hadoop - 发布数据损坏时跳过 kafka 中的 sink 步骤

C# 将 AVRO 转换为 JSON

java - KafkaAvroDeserializer 因 Kyro 异常而失败

serialization - 如何在 Avro 模式中表示重复字段?

python - 使用 Tkinter 在 Matplotlib 中获取鼠标单击的位置

python - 子进程 python - 非零异常

python - 在 Pyplot 中,一旦绘图已经绘制完成,我们如何更改绘图的线宽?

python - 管理员中的 Django-tinymce 功能齐全

java - BQ 加载具有不同模式的 Avro 文件,仅添加字段

python - 在 Python 中取消融化 Pandas 数据框?