如何在python中提取avro文件的模式

时间:2014-07-29 00:06:37

标签: python schema avro

我正在尝试使用Python Avro库(https://pypi.python.org/pypi/avro)来读取JAVA生成的AVRO文件。由于架构已嵌入avro文件中,为什么我需要指定架构文件?有没有办法自动提取它?

发现另一个名为fastavro(https://pypi.python.org/pypi/fastavro)的软件包可以提取avro架构。手册是否在设计中指定了python arvo包中的模式文件?非常感谢你。

2 个答案:

答案 0 :(得分:5)

/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()

答案 1 :(得分:1)

在我的情况下,为了将架构作为“消耗品”python字典包含有用的信息,如模式名称等,我做了以下内容:

reader: DataFileReader = DataFileReader(open(avro_file, 'rb'), DatumReader())
schema: dict = json.loads(reader.meta.get('avro.schema').decode('utf-8'))

reader.meta是一个非常无用的词典“按原样”,因为它包含两个键:avro.codecavro.schema,它们都是bytes个对象(所以我必须解析它以访问属性。)