我正在尝试使用Python Avro库(https://pypi.python.org/pypi/avro)来读取JAVA生成的AVRO文件。由于架构已嵌入avro文件中,为什么我需要指定架构文件?有没有办法自动提取它?
发现另一个名为fastavro(https://pypi.python.org/pypi/fastavro)的软件包可以提取avro架构。手册是否在设计中指定了python arvo包中的模式文件?非常感谢你。
答案 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.codec
和avro.schema
,它们都是bytes
个对象(所以我必须解析它以访问属性。)