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

duk*_*ody 2 python bigdata dask

数据帧的Dask包文档说:

Dask数据帧看起来和感觉像是pandas数据帧,但是使用多个线程对大于内存的数据集进行操作.

但后来在同一页面中:

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

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

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

MRo*_*lin 6

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

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

  • 谢谢.你知道在哪里可以找到有关Dask如何管理磁盘/内存的文档吗?官方文件没有说清楚. (2认同)

Nab*_*bin 5

两年后我碰巧来到这个页面,现在有一个简单的选项可以限制每个工作人员的内存使用量。我认为@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.
Run Code Online (Sandbox Code Playgroud)

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

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

$ dask-worker tcp://scheduler:port --memory-limit 4e9 --local-directory /scratch 
Run Code Online (Sandbox Code Playgroud)

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