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

How do Dask dataframes handle larger-than-memory datasets?

documentation of the Dask package for dataframes 说:

Dask dataframes look and feel like pandas dataframes, but operate on datasets larger than memory using multiple threads.

但稍后在同一页中:

One dask DataFrame is comprised of several in-memory pandas DataFrames separated along the index.

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

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

Dask.dataframe 延迟加载数据并尝试在对数据集的一次线性扫描中执行整个计算。令人惊讶的是,这通常是可行的。

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

我碰巧在 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 

该数据仍然可用,必要时将从磁盘读回。