Dask数据帧如何处理大于内存的数据集?

时间:2016-03-28 19:17:55

标签: python dask bigdata

documentation of the Dask package for dataframes说:

  

Dask数据帧看起来和感觉像是pandas数据帧,但仍在运行   使用多个线程的数据集大于内存。

但后来在同一页面中:

  

一个dask DataFrame由几个内存中的pandas DataFrame组成   沿着指数分开。

Dask是否会从磁盘中读取不同的DataFrame分区并执行计算以适应内存?是否在需要时将某些分区溢出到磁盘?一般来说,Dask如何管理内存< - >磁盘IO数据允许大于内存的数据分析?

我尝试在10M MovieLens数据集上执行一些基本计算(例如平均评级),我的笔记本电脑(8GB RAM)开始交换。

2 个答案:

答案 0 :(得分:6)

Dask.dataframe懒惰地加载数据并尝试通过数据集进行一次线性扫描来执行整个计算。令人惊讶的是,这通常是可行的。

智能地转储到磁盘也是一个可以管理的选项,尤其是在需要随机播放时,但通常有办法解决这个问题。

答案 1 :(得分:2)

两年后,我碰巧来到了此页面,现在有一个简单的选项可以限制每个工作人员的内存使用量。认为在该线程不活动之后,@ MRocklin包含了它。

$ dask-worker tcp://scheduler:port --memory-limit=auto  # total available RAM on the machine
$ dask-worker tcp://scheduler:port --memory-limit=4e9  # four gigabytes per worker process.

此功能称为工作人员Spill-to-disk政策,详细信息可在文档中here中找到。

显然,多余的数据将溢出到以下命令指定的目录中:

$ dask-worker tcp://scheduler:port --memory-limit 4e9 --local-directory /scratch 

该数据仍然可用,并在必要时从磁盘中读取。