avro的Python实现慢吗?

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,

我正在使用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()
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%确定这是可能的。嗯,是的,考虑到时间差异,值得寻找更快的替代方案。