2024-05-21 13:30:48 发布
网友
我试图使用Python Avro库(https://pypi.python.org/pypi/avro)来读取JAVA生成的Avro文件。由于架构已经嵌入到avro文件中,为什么需要指定架构文件?有自动提取的方法吗?
发现另一个名为fastavro(https://pypi.python.org/pypi/fastavro)的包可以提取avro架构。手册是否按设计指定了python arvo包中的模式文件?非常感谢你。
我使用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的直接检查揭示了答案:
/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.codec和avro.schema,这两个键都是bytes对象(所以我必须解析它才能访问属性)。
reader.meta
avro.codec
avro.schema
bytes
我使用python 3.4和Avro包1.7.7
对于架构文件使用:
对
/usr/local/lib/python2.7/site-packages/avro/datafile.py
的直接检查揭示了答案:奇怪的是,在Java中有一个特殊的方法来实现这个功能:^{} 。
在我的例子中,为了将模式作为包含有用信息(如模式名等)的“可消费”python字典获取,我执行了以下操作:
reader.meta
是一个非常无用的“原样”字典,因为它包含两个键:avro.codec
和avro.schema
,这两个键都是bytes
对象(所以我必须解析它才能访问属性)。相关问题 更多 >
编程相关推荐