Как я могу использовать AVRO для обработки потока, который я не могу искать?

StackOverflow https://stackoverflow.com/questions/3783453

  •  04-10-2019
  •  | 
  •  

Вопрос

Я использую 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 для чтения данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top