欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

pyspark 读取本地csv_tidyfst vs pandas(1):csv文件读写

程序员文章站 2024-01-16 18:38:10
...

作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(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)

pyspark 读取本地csv_tidyfst vs pandas(1):csv文件读写

每次运行约花销0.078s。

R代码(观察mean这一项):

library(tidyfst)

res = microbenchmark::microbenchmark({
  library(tidyfst)
  fread("data/UFO.csv")
 } ,times = 100,unit = "s"
)

pyspark 读取本地csv_tidyfst vs pandas(1):csv文件读写

每次运行约花销0.020s。

结论:就数据导入而言,pandas速度不及tidyfst,data.table比较厉害。如果数据量级变大,这个差距可能会更加明显。


由于测试的时候是另外创建环境,因此加载包的时间也要算进去。但是其实它们是微不足道的,我们可以进行一个小的补充测试(分别注释掉文件读取的代码):

Python:

pyspark 读取本地csv_tidyfst vs pandas(1):csv文件读写

R:

pyspark 读取本地csv_tidyfst vs pandas(1):csv文件读写

我们比较的量级在1e-3左右,而加载包的时间量级在1e-5甚至更小。


吐槽:Python的帮助文档真的是一般,找一个测时间的函数找了半天也没有找到比较好的,R中无论bench包还是microbenchmark包都远远超越于此。如果有朋友知道python中更好的测时间的方法,敬请告知。