如何在Python中提取Avro文件的架构

2024-04-25 06:34:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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


Tags: 文件方法httpsorgpypi架构模式手册
3条回答

我使用python 3.4和Avro包1.7.7

对于架构文件使用:

reader = avro.datafile.DataFileReader(open('file_name.avro',"rb"),avro.io.DatumReader())
schema = reader.meta
print(schema) 

/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中有一个特殊的方法来实现这个功能:^{}

在我的例子中,为了将模式作为包含有用信息(如模式名等)的“可消费”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对象(所以我必须解析它才能访问属性)。

相关问题 更多 >