为了账号安全,请及时绑定邮箱和手机立即绑定

Dask 读取 csv 与 Pandas 读取 csv

Dask 读取 csv 与 Pandas 读取 csv

繁花如伊 2021-11-16 15:02:03
我有以下问题。我有一个巨大的 csv 文件,想用多处理加载它。对于具有 500000 行和 130 列不同数据类型的示例文件,Pandas 需要 19 秒。我尝试了 dask,因为我想对阅读进行多处理。但这需要更长的时间,我想知道为什么。我有 32 个内核。并尝试了这个:import dask.dataframe as ddimport dask.multiprocessingdask.config.set(scheduler='processes')df = dd.read_csv(filepath,               sep='\t',            blocksize=1000000,             )df = df.compute(scheduler='processes')     # convert to pandas
查看完整描述

3 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

从磁盘读取大文件时,瓶颈是IO。由于 Pandas 使用 C 解析引擎进行了高度优化,因此收益很少。任何使用多处理或多线程的尝试都可能降低性能,因为您将花费相同的时间从磁盘加载数据,并且只会增加一些用于同步不同进程或线程的开销。


查看完整回答
反对 回复 2021-11-16
?
绝地无双

TA贡献1946条经验 获得超4个赞

考虑一下这意味着什么:

df = df.compute(scheduler='processes')

  • 每个进程访问一些原始数据块。这可能是并行的,或者很可能受底层存储设备的 IO 限制

  • 每个进程都从它的数据中生成一个数据帧,这是 CPU 密集型的,并且可以很好地并行化

  • 每个块都由进程序列化并从您调用它的地方传达给客户端

  • 客户端反序列化块并为您连接它们。

小故事:如果您唯一的工作是在内存中获取 Pandas 数据帧,请不要使用 Dask,它只会增加开销。不要使用DASK,如果你可以在块独立运作,并只收取少量的客户端输出(例如,GROUPBY骨料等)。


查看完整回答
反对 回复 2021-11-16
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

我建议使用num_workers关键字参数尝试不同数量的进程来计算。

与上面所说的相反, read_csv 绝对是受计算限制的,并且让几个进程并行工作可能会有所帮助。

但是,同时在磁盘上运行太多进程可能会导致大量争用并减慢速度。

我建议对不同数量的进程进行一些试验,看看哪种效果最好。


查看完整回答
反对 回复 2021-11-16
  • 3 回答
  • 0 关注
  • 325 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信