如何在python中提取avro文件的模式
Posted
技术标签:
【中文标题】如何在python中提取avro文件的模式【英文标题】:How to extract schema for avro file in python 【发布时间】:2014-09-20 07:00:00 【问题描述】:我正在尝试使用 Python Avro 库 (https://pypi.python.org/pypi/avro) 来读取由 JAVA 生成的 AVRO 文件。既然 schema 已经嵌入在 avro 文件中了,为什么还要指定一个 schema 文件呢?有没有办法自动提取?
发现另一个名为 fastavro(https://pypi.python.org/pypi/fastavro) 的包可以提取 avro 模式。 python arvo包中的手动指定模式文件是设计的吗?非常感谢。
【问题讨论】:
【参考方案1】:在我的例子中,为了将架构作为一个“消耗性”python 字典,其中包含有用的信息,例如架构名称等,我做了以下操作:
reader: DataFileReader = DataFileReader(open(avro_file, 'rb'), DatumReader())
schema: dict = json.loads(reader.meta.get('avro.schema').decode('utf-8'))
reader.meta
是一个“按原样”非常无用的字典,因为它包含 2 个键:avro.codec
和 avro.schema
,它们都是 bytes
对象(所以我必须解析它才能访问属性)。
【讨论】:
【参考方案2】:我使用 python 3.4 和 Avro 包 1.7.7
用于架构文件:
reader = avro.datafile.DataFileReader(open('file_name.avro',"rb"),avro.io.DatumReader())
schema = reader.meta
print(schema)
【讨论】:
这也适用于 Python 2.7。我的导入语句如下(不知道你需要多少): import avro.schema from avro.datafile import DataFileReader from avro.io import DatumReader【参考方案3】:对/usr/local/lib/python2.7/site-packages/avro/datafile.py
的直接检查揭示了答案:
reader = avro.datafile.DataFileReader(input,avro.io.DatumReader())
schema = reader.datum_reader.writers_schema
print schema
奇怪的是,在 Java 中有一个特殊的方法:reader.getSchema()
。
【讨论】:
以上是关于如何在python中提取avro文件的模式的主要内容,如果未能解决你的问题,请参考以下文章