pyspark 读取本地csv_tidyfst vs pandas(1):csv文件读写
作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量、机器学习、数据可视化、应用统计建模、知识图谱等,著有《R语言高效数据处理指南》(《R语言数据高效处理指南》(黄天元)【摘要 书评 试读】- 京东图书)。知乎专栏:R语言数据挖掘。邮箱:[email protected]欢迎合作交流。
在tidyfst中,csv文件的读写依赖于data.table直接提供的fread函数,而pandas中则是利用了其自带的read_csv函数。现在比较一下两者对于项目https://github.com/yeayee/joyful-pandas中data文件夹下UFO.csv(3.8M)的运行时间(各运行100次取平均值)。
Python代码:
import timeit as timeit
code_to_test = """
import pandas as pd
df = pd.read_csv("data/UFO.csv")
"""
elapsed_time = timeit.timeit(code_to_test, number=100)/100
print(elapsed_time)
每次运行约花销0.078s。
R代码(观察mean这一项):
library(tidyfst)
res = microbenchmark::microbenchmark({
library(tidyfst)
fread("data/UFO.csv")
} ,times = 100,unit = "s"
)
每次运行约花销0.020s。
结论:就数据导入而言,pandas速度不及tidyfst,data.table比较厉害。如果数据量级变大,这个差距可能会更加明显。
由于测试的时候是另外创建环境,因此加载包的时间也要算进去。但是其实它们是微不足道的,我们可以进行一个小的补充测试(分别注释掉文件读取的代码):
Python:
R:
我们比较的量级在1e-3左右,而加载包的时间量级在1e-5甚至更小。
吐槽:Python的帮助文档真的是一般,找一个测时间的函数找了半天也没有找到比较好的,R中无论bench包还是microbenchmark包都远远超越于此。如果有朋友知道python中更好的测时间的方法,敬请告知。
上一篇: redisTemplate.keys异常