Dask 读取 csv 与 Pandas 读取 csv

我有以下问题。我有一个巨大的 csv 文件,想用多处理加载它。对于具有 500000 行和 130 列不同数据类型的示例文件,Pandas 需要 19 秒。我尝试了 dask,因为我想对阅读进行多处理。但这需要更长的时间,我想知道为什么。我有 32 个内核。并尝试了这个:


import dask.dataframe as dd

import dask.multiprocessing

dask.config.set(scheduler='processes')

df = dd.read_csv(filepath,  

             sep='\t',

            blocksize=1000000,

             )

df = df.compute(scheduler='processes')     # convert to pandas


繁花如伊
浏览 326回答 3
3回答

白衣染霜花

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

绝地无双

考虑一下这意味着什么:df = df.compute(scheduler='processes')每个进程访问一些原始数据块。这可能是并行的,或者很可能受底层存储设备的 IO 限制每个进程都从它的数据中生成一个数据帧,这是 CPU 密集型的,并且可以很好地并行化每个块都由进程序列化并从您调用它的地方传达给客户端客户端反序列化块并为您连接它们。小故事:如果您唯一的工作是在内存中获取 Pandas 数据帧,请不要使用 Dask,它只会增加开销。不要使用DASK,如果你可以在块独立运作,并只收取少量的客户端输出(例如,GROUPBY骨料等)。

慕尼黑8549860

我建议使用num_workers关键字参数尝试不同数量的进程来计算。与上面所说的相反, read_csv 绝对是受计算限制的,并且让几个进程并行工作可能会有所帮助。但是,同时在磁盘上运行太多进程可能会导致大量争用并减慢速度。我建议对不同数量的进程进行一些试验,看看哪种效果最好。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python