python如何读取百万级的csv文件-Python如何读取数据量百万级的CSV文件数据?

是时候安利我们的开源库:Mars。Mars DataFrame 可以用来加速 pandas 执行,即使在单机。而代码几乎无需改动。

以下代码都是在我的笔记本上跑的。

任务一:只读取 CSV 文件

pandas:

In [1]: import pandas as pd

In [2]: %time df = pd.read_csv('ratings.csv')

CPU times: user 4.75 s, sys: 1.13 s, total: 5.88 s

Wall time: 4.71 s

Mars DataFrame:

In [1]: import mars.dataframe as md

In [2]: %time df = md.read_csv('ratings.csv').execute()

CPU times: user 9.55 s, sys: 4.9 s, total: 14.4 s

Wall time: 1.52 s

时间从 4.71s 下降到 1.52s(3.1x)。

任务二:读取 CSV + 分组聚合

pandas:

In [1]: import pandas as pd

In [2]: %%time

...: df = pd.read_csv('ratings.csv')

...: df.groupby('movieId').agg({'rating': ['max', 'min', 'std']})

...:

...:

CPU times: user 6.56 s, sys: 1.15 s, total: 7.72 s

Wall time: 5.42 s

Out[2]:

rating

max min std

movieId

1 5.0 0.5 0.927513

2 5.0 0.5 0.958437

3 5.0 0.5 1.013307

4 5.0 0.5 1.111442

5 5.0 0.5 0.993108

... ... ... ...

176267 4.0 4.0 NaN

176269 3.5 3.5 NaN

176271 5.0 5.0 NaN

176273 1.0 1.0 NaN

176275 3.0 3.0 NaN

[45115 rows x 3 columns]

Mars DataFrame:

In [1]: import mars.dataframe as md

In [2]: %%time

...: df = md.read_csv('ratings.csv')

...: df.groupby('movieId').agg({'rating': ['max', 'min', 'std']}).execute()

...:

...:

CPU times: user 12.5 s, sys: 9.09 s, total: 21.6 s

Wall time: 1.93 s

Out[2]:

rating

max min std

movieId

1 5.0 0.5 0.927513

2 5.0 0.5 0.958437

3 5.0 0.5 1.013307

4 5.0 0.5 1.111442

5 5.0 0.5 0.993108

... ... ... ...

176267 4.0 4.0 NaN

176269 3.5 3.5 NaN

176271 5.0 5.0 NaN

176273 1.0 1.0 NaN

176275 3.0 3.0 NaN

[45115 rows x 3 columns]

时间从 5.42s 下降到 1.93s(2.8x)。

总结

使用 Mars 很简单。只需要:

pip install pymars

而数据数据特别大,还可以使用 Mars 分布式,Mars 很容易部署(通过几个命令),也支持在 k8s 集群拉起服务,yarn 的支持也会很快到来。

想参与 Mars 开发,欢迎提 PR

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值