Comment puis-je utiliser Avro pour traiter un flux que je ne peux pas chercher?
Question
J'utilise Avro 1.4.0 pour lire des données sur S3 via la liaison Python Avro et la bibliothèque Boto S3. Quand j'ouvre un avro.datafile.DataFileReader sur le fichier comme des objets retournés par Boto il échoue immédiatement quand il essaie de chercher (). Pour l'instant je travaille autour en lisant les objets S3 dans des fichiers temporaires.
je voudrais être capable de diffuser à travers un objet python qui lisent des supports (). Quelqu'un peut-il donner des conseils?
La solution
Je ne suis pas très clair sur ce point et cela ne peut être la réponse. J'avais l'impression que
diter = datafile.DataFileReader(..)
retourne un itérateur pour que vous puissiez effectuer les opérations suivantes
for data in diter:
....
me corriger si je me trompe.
Revisiter ma réponse:
Vous avez raison, datafile.DataFileReader ne joue pas bien avec un lecteur pour qui cherchent échouerait.
il utilise avro.io.BinaryDecoder qui accepte un lecteur.
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
Ce que vous pouvez faire est de créer votre propre classe de lecteur qui fournit ces fonctions -. Lecture, rechercher et dire, mais utilise en interne Boto bibliothèque S3 pour lire des données