我正在使用Avro 1.4.0通过Python avro绑定和boto S3库从S3中读取一些数据。当我在文件上打开一个avro.datafile.DataFileReader,就像boto返回的对象一样,它在尝试seek()时立即失败。现在我正在通过将S3对象读入临时文件来解决这个问题。
我希望能够流过任何支持read()的python对象。有人可以提供建议吗?
答案 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库来读取数据。