我正在使用AVRO 1.4.0通过Python Avro绑定和BOTO S3库来读取S3的一些数据。当我在文件上打开一个avro.datafile.datafiledereader时,就像boto返回的对象一样,它在尝试搜索时立即失败()。目前,我正在通过将S3对象读为临时文件来解决此问题。

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

有帮助吗?

解决方案

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

diter = datafile.DataFileReader(..) 

返回迭代器,以便您可以执行以下操作

for data in diter:
    ....

纠正我,如果我在这里错了。

重新审视我的答案:

您是对的,datafile.datafilereader与Seek会失败的读者的表现不佳。

它使用接受读者的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