Python实现Avro速度慢?

6 投票
2 回答
3186 浏览
提问于 2025-04-16 17:05

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

2 个回答

3

在PyPI上可以找到的avro Python包是用纯Python写的,所以我不觉得它比Java慢个数量级或者更多有什么奇怪的。

虽然有一个Avro的C语言实现,但据我所知,目前还没有人基于这个实现做出Python的扩展。

4

看起来有一个叫做 fastavro 的Python库,它是用Cython写的,运行速度很快,但功能上没有那么全面。

https://bitbucket.org/tebeka/fastavro

撰写回答