avro的Python实现慢吗?
我正在使用avro库从avro文件中读取一些数据。从文件中加载33K个对象大约需要一分钟。这对我来说似乎非常慢,特别是Java版本在大约1秒的时间内读取同一个文件 这是密码,我做错什么了吗avro的Python实现慢吗?,python,avro,Python,Avro,我正在使用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,
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()
PyPI上可用的是纯Python,因此如果它比Java慢一个数量级或更多,我并不感到惊讶
有一个Avro C实现,但据我所知,还没有人基于它创建Python扩展。似乎有一个名为
fastavro
的Python包,它是一个快速Cython实现,但功能不太完整
您的代码没有任何作用。如果avro存在速度问题。
load()
应在返回前调用fo.close()
,而不是让文件保持打开状态。不过,这可能不是速度变慢的原因。如果您想知道速度变慢的原因,请学习如何使用分析器。我知道如何使用分析器(或两个)。我想知道我是否做错了什么。遗憾的是,avro c实现在我的文件中出现了错误。@lazy1 bummer。您是否被迫使用Avro格式,是否考虑过其他替代方案?替代方案是CSV,在Python中它非常快(33K行为0.2)。但是,CSV不像avro那样携带模式。我可能可以使用CSV标题,但由于其他人正在(通过Pig)生成它们,我不能100%确定这是可能的。嗯,是的,考虑到时间差异,值得寻找更快的替代方案。