3

Avro 1.4.0 を使用して、Python avro バインディングと boto S3 ライブラリを介して S3 からデータを読み取ります。boto によって返されたオブジェクトのようなファイルで avro.datafile.DataFileReader を開くと、seek() を試行するとすぐに失敗します。今のところ、S3 オブジェクトを一時ファイルに読み込むことで、この問題を回避しています。

read() をサポートする任意の Python オブジェクトをストリーミングできるようにしたいと考えています。誰でもアドバイスを提供できますか?

4

1 に答える 1

2

私はこれについてあまり明確ではなく、これが答えではないかもしれません。という印象でした

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

あなたができることは、これらの機能を提供する独自のリーダークラスを作成することです- read 、 seek 、 tell が内部的に boto S3 ライブラリを利用してデータを読み取ります。

于 2010-09-24T00:50:19.983 に答える