6

数据框的 Dask 包的文档说:

Dask 数据帧的外观和感觉类似于 pandas 数据帧,但使用多个线程对大于内存的数据集进行操作。

但稍后在同一页面中:

一个 dask DataFrame 由几个沿索引分隔的内存中 pandas DataFrame 组成。

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

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

4

2 回答 2

7

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

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

于 2016-03-28T19:39:37.813 回答
4

我碰巧在 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工作人员策略,详细信息可以文档中找到。

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

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

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

于 2018-12-27T09:49:19.017 回答