代码之家  ›  专栏  ›  技术社区  ›  Spike Gronim

如何使用avro处理我无法查找的流?

  •  3
  • Spike Gronim  · 技术社区  · 14 年前

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

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

    1 回复  |  直到 14 年前
        1
  •  1
  •   pyfunc    14 年前

    我对此不太清楚,这可能不是答案。 我觉得

    diter = datafile.DataFileReader(..) 
    

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

    for data in diter:
        ....
    

    如果我错了,纠正我。

    重温我的答案:

    你说得对,datafile.datafile reader不能很好地处理搜索失败的读卡器。

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

    您所能做的就是创建自己的读卡器类,它确实提供了这些功能——读取、查找和告诉,但在内部使用botoS3库来读取数据。