2017-02-27 2 views
1

Ich versuche, eine Avro basierend auf einem vorhandenen Schema zu erstellen, aber ich erhalte einen Fehler bei der Verwendung der Syntax aus dem Tutorial here. Die Konsole sagt, dass das 'Bytes' -Objekt kein Attribut 'to_json' hat, aber tief in der Avro-Bibliothek. Gibt es gute Problemumgehungen oder Möglichkeiten, diesen Fehler zu beheben?Avro Writer in Python 3.5

Voll Fehler:

Traceback (most recent call last): 
File "build_data.py", line 15, in <module> 
al.create_avro(logs) 
File "AppLog.py", line 57, in create_avro 
writer = DataFileWriter(open("new.avro", "wb"), DatumWriter(), schema) 
File "/usr/local/lib/python3.5/dist-packages/avro_python3-1.8.1-py3.5.egg/avro/datafile.py", line 151, in __init__ 
self.SetMeta('avro.schema', str(writer_schema).encode('utf-8')) 
File "/usr/local/lib/python3.5/dist-packages/avro_python3-1.8.1-py3.5.egg/avro/schema.py", line 266, in __str__ 
return json.dumps(self.to_json()) 
File "/usr/local/lib/python3.5/dist-packages/avro_python3-1.8.1-py3.5.egg/avro/schema.py", line 808, in to_json 
to_dump['items'] = item_schema.to_json(names) 
AttributeError: 'bytes' object has no attribute 'to_json' 

Code:

schema = avro.schema.ArraySchema(open("AppLogs.avsc", "rb").read()) 
writer = DataFileWriter(open("new.avro", "wb"), DatumWriter(), schema) 

Vielen Dank für Ihre Hilfe.

Antwort

0

Die mit in the question verknüpfte Dokumentation ist veraltet. Ich war in der Lage, das oben genannte zu beheben, indem ich den Aufruf der Schema-Methode zu Parse änderte und das b von "open" entfernte.

Hier ist der aktualisierte Code:

schema = avro.schema.Parse(open("AppLogs.avsc", "r").read()) 
writer = DataFileWriter(open(new_avro, "wb"), DatumWriter(), schema)