Как использовать Avro для обработки потока, который я не могу найти? - PullRequest
3 голосов
/ 24 сентября 2010

Я использую Avro 1.4.0 для чтения некоторых данных из S3 через привязки Python avro и библиотеку boto S3.Когда я открываю avro.datafile.DataFileReader для файла, подобного объектам, возвращаемым boto, он сразу же завершается неудачно, когда пытается искать ().Сейчас я работаю над этим, читая объекты S3 во временные файлы.

Я бы хотел иметь возможность потоковой передачи через любой объект python, который поддерживает read ().Кто-нибудь может дать совет?

1 Ответ

1 голос
/ 24 сентября 2010

Мне не очень ясно об этом, и это может быть не ответ. У меня сложилось впечатление, что

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.

...