3

我正在使用 Avro 1.4.0 通过 Python avro 绑定和 boto S3 库从 S3 中读取一些数据。当我在文件上打开 avro.datafile.DataFileReader 时,例如 boto 返回的对象,它在尝试 seek() 时立即失败。现在我正在通过将 S3 对象读入临时文件来解决这个问题。

我希望能够通过任何支持 read() 的 python 对象进行流式传输。有人可以提供建议吗?

4

1 回答 1

2

我对此不是很清楚,这可能不是答案。我的印象是

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 库来读取数据。

于 2010-09-24T00:50:19.983 回答