You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Avro向修改后schema写入数据报不符合schema错误如何解决?

Avro写入报错排查与多schema写入问题解答

报错原因与修复

你当前的报错是seating字段类型不匹配导致的:
你在schema中声明seating的类型是{"type": "map", "values": "int"},Avro的map类型在Python中对应的是单层级字典对象,但你代码中给seating赋的值是由多个字典组成的列表,不符合schema的类型约束,因此触发了类型校验报错。

修正方法很简单,把seating的赋值改成单字典即可:

data = {
    'name': 'Foo',
    'time': 25612345,
    'location': 'Berne',
    'speakers': ['Jean', 'Elton'],
    'participants': ['John', 'Michel', 'Jacques'],
    # 修正后的seating字段
    'seating': {'John': 1, 'Michel': 2, 'Jacques': 3}
}

修改后重新运行即可正常写入数据。

新旧schema数据能否写入同一个Avro文件

不能直接写入。Avro文件的文件头仅会存储唯一的写入schema,同一文件内的所有记录都必须适配该schema,否则都会触发类型校验错误。
如果有需要合并存储新旧schema数据的需求,可选择以下两种方案:

  • 按Avro schema演进规则定义新schema,保证新schema向前兼容旧schema(比如新增字段设置默认值,不删除、不修改原有字段的类型和名称),读取旧数据时通过DatumReader(old_writer_schema, new_reader_schema)做自动类型转换,将旧数据适配为新schema格式后再统一写入新文件。
  • 如果新旧schema差异过大无法兼容,建议将不同schema的记录分开存储到不同的Avro文件中,避免数据格式混乱。

内容的提问来源于stack exchange,提问作者J.erome

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 13:15:04