6

avroライブラリを使用してavroファイルからいくつかのデータを読み取っています。ファイルから33Kオブジェクトをロードするのに約1分かかります。これは私には非常に遅いように思えます。特に、Javaバージョンが同じファイルを約1秒で読み取る場合はそうです。

これがコードです、私は何か間違ったことをしていますか?

import avro.datafile
import avro.io
from time import time

def load(filename):
    fo = open(filename, "rb")
    reader = avro.datafile.DataFileReader(fo, avro.io.DatumReader())
    for i, record in enumerate(reader):
        pass

    return i + 1

def main(argv=None):
    import sys
    from argparse import ArgumentParser

    argv = argv or sys.argv

    parser = ArgumentParser(description="Read avro file")


    start = time()
    num_records = load("events.avro")
    end = time()

    print("{0} records in {1} seconds".format(num_records, end - start))

if __name__ == "__main__":
    main()
4

2 に答える 2

4

fastavro高速な Cython 実装であるという名前の python パッケージがあるようですが、機能が完全ではありません。

https://bitbucket.org/tebeka/fastavro

于 2012-11-16T22:57:58.130 に答える
3

PyPI で利用可能なavro Python パッケージは純粋な Python であるため、Java よりも 1 桁以上遅くても驚くことではありません。

Avro C の実装はありますが、私の知る限り、それに基づいた Python 拡張機能はまだ作成されていません。

于 2011-05-05T21:26:29.310 に答える