Come si usa Avro per elaborare un flusso che non posso chiedere?
Domanda
Sto usando Avro 1.4.0 per leggere alcuni dati su S3 tramite Python Avro attacchi e il boto S3 biblioteca. Quando apro un avro.datafile.DataFileReader sul file come oggetti restituiti da boto non riesce immediatamente quando si cerca di seek (). Per ora sto lavorando intorno a questo leggendo la S3 oggetti in file temporanei.
Mi piacerebbe essere in grado di trasmettere attraverso ogni oggetto Python che supporti read (). Qualcuno può fornire consulenza?
Soluzione
io non sono molto chiaro su questo e questo non può essere la risposta. Io ero l'impressione che
diter = datafile.DataFileReader(..)
restituisce un iteratore in modo che si possa effettuare le seguenti operazioni
for data in diter:
....
Correggetemi, se sbaglio qui.
Rivisitare la mia risposta:
Hai ragione, datafile.DataFileReader non gioca bene con un lettore per il quale cercano fallirebbe.
usa avro.io.BinaryDecoder che accetta un lettore.
class BinaryDecoder(object):
"""Read leaf values."""
def __init__(self, reader):
"""
reader is a Python object on which we can call read, seek, and tell.
"""
self._reader = reader
Che cosa si può fare è creare una classe lettore che non fornisce queste funzioni -. Leggi, cercare e raccontare, ma utilizza internamente boto biblioteca S3 di leggere dei dati