我正在使用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()
答案 0 :(得分:3)
PyPI上可用的avro Python package是纯Python,所以如果它比Java还要慢,那么我并不感到惊讶。
有一个Avro C实现,但据我所知,还没有人基于它创建一个Python扩展。
答案 1 :(得分:1)
似乎有一个名为fastavro
的python包是一个快速的Cython实现,但功能不完整。