Cómo extraer el esquema para el archivo avro en python

Estoy tratando de usar la biblioteca de Python Avro ( https://pypi.python.org/pypi/avro ) para leer un archivo AVRO generado por JAVA. Dado que el esquema ya está incrustado en el archivo avro, ¿por qué debo especificar un archivo de esquema? ¿Hay alguna forma de extraerlo automáticamente?

Encontrado otro paquete llamado fastavro ( https://pypi.python.org/pypi/fastavro ) puede extraer un esquema avro. ¿Está el manual especificando el archivo de esquema en el paquete Python Arvo por diseño? Muchas gracias.

Un examen directo de /usr/local/lib/python2.7/site-packages/avro/datafile.py revela la respuesta:

 reader = avro.datafile.DataFileReader(input,avro.io.DatumReader()) schema = reader.datum_reader.writers_schema print schema 

Curiosamente, en Java hay un método especial para eso: reader.getSchema() .

Yo uso Python 3.4 y Avro paquete 1.7.7

Para uso del archivo de esquema:

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

En mi caso, para obtener el esquema como un diccionario “consumible” de python que contiene información útil, como el nombre del esquema, hice lo siguiente:

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

El reader.meta es un diccionario bastante inútil “tal como está”, ya que contiene 2 claves: avro.codec y avro.schema que son objetos de bytes (así que tuve que analizarlo para acceder a las propiedades).