我正在使用 Avro 1.4.0 通过 Python avro 绑定和 boto S3 库从 S3 中读取一些数据。当我在文件上打开 avro.datafile.DataFileReader 时,例如 boto 返回的对象,它在尝试 seek() 时立即失败。现在我正在通过将 S3 对象读入临时文件来解决这个问题。
我希望能够通过任何支持 read() 的 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
您可以做的是创建自己的阅读器类,它确实提供了这些功能 - read 、 seek 和 tell ,但在内部使用 boto S3 库来读取数据。