Avro - 为什么有一个选项可以在 DatumReader 中指定编写器架构?

Avro - Why is there an option to specify the writers schema in DatumReader?

读取 Avro 文件时,有一个选项可以指定 Reader 的架构来代替已嵌入文件的架构。

reader = DataFileReader(data, DatumReader(readers_schema=readers_schema))

让我感到困惑的是,还有一个选项可以指定 Writer 的架构,即

reader = DataFileReader(data, DatumReader(writers_schema=writers_schema, readers_schema=readers_schema))

如果文件中已经嵌入了编写器架构,为什么还需要这样做?如果嵌入式模式与传入的编写器模式不同,我们会看到什么样的行为?

如果您指的是参考 python 实现,DatumReader 的作者架构(如果有)gets overwritten with the one embedded in the file。看起来有一个 TODO 可以用它来指定预期的模式,但这似乎还没有实现。

使用 DatumReader 指定作者的架构通常很有用(例如,如果您正在读取使用不同架构序列化的容器文件之外的二进制数据)。