如何使用Avro处理我无法搜索的流?

时间:2010-09-24 00:43:53

标签: python hadoop boto avro

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

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

1 个答案:

答案 0 :(得分:1)

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

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