6

我正在使用 avro 库从 avro 文件中读取一些数据。从文件加载 33K 对象大约需要一分钟。这对我来说似乎很慢,特别是 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

似乎有一个名为的python包fastavro是一个快速的 Cython 实现,但功能不太完整。

https://bitbucket.org/tebeka/fastavro

于 2012-11-16T22:57:58.130 回答
3

PyPI 上可用的avro Python 包是纯 Python,所以如果它比 Java 慢一个数量级或更多,我并不感到惊讶。

有一个 Avro C 实现,但据我所知,还没有人基于它创建 Python 扩展。

于 2011-05-05T21:26:29.310 回答