如何使用Avro处理无法跳转的流?
我正在使用Avro 1.4.0通过Python的avro绑定和boto S3库从S3读取一些数据。当我在boto返回的文件对象上打开avro.datafile.DataFileReader时,它在尝试查找数据时立刻失败。现在我暂时通过将S3对象读取到临时文件中来解决这个问题。
我希望能够流式读取任何支持read()的Python对象。有没有人能给点建议?
1 个回答
2
我对这个问题不是很清楚,可能我的理解不太对。
我原本以为
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库来读取数据。