Как я могу использовать AVRO для обработки потока, который я не могу искать?
Вопрос
Я использую AVRO 1.4.0, чтобы прочитать некоторые данные из S3 через привязки Python AVRO и библиотеку Boto S3. Когда я открываю AVRO.Datafile.datafilereader в файле, как объекты, возвращаемые BOTO, он сразу же терпит неудачу, когда он пытается искать (). На данный момент я работаю вокруг этого, читая объекты S3 во временные файлы.
Я хотел бы иметь возможность транслировать через любой объект Python, который поддерживает чтение (). Кто-нибудь может дать совет?
Решение
Я не очень понятен на этом, и это не может быть ответом. Я был впечатление, что
diter = datafile.DataFileReader(..)
Возвращает итератор, чтобы вы могли сделать следующее
for data in diter:
....
Поправьте мне, если я не прав здесь.
Пересмотр моего ответа:
Вы правы, datafile.datafilereader не играют хорошо с читателем, для которого ищется неудачно.
Он использует AVRO.IO.BinaryDecoder, который принимает читатель.
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
То, что вы можете сделать, это создать свой собственный класс читателя, который обеспечивает эти функции - прочитайте, искать и скажите, но внутренне используют библиотеку Boto S3 для чтения данных.