duk*_*ody 2 python bigdata dask
Dask数据帧看起来和感觉像是pandas数据帧,但是使用多个线程对大于内存的数据集进行操作.
但后来在同一页面中:
一个dask DataFrame由沿索引分隔的几个内存中的pandas DataFrame组成.
Dask是否从磁盘中顺序读取不同的DataFrame分区并执行计算以适应内存?是否在需要时将某些分区溢出到磁盘?一般来说,Dask如何管理数据的内存< - >磁盘IO以允许大于内存的数据分析?
我尝试在10M MovieLens数据集上执行一些基本计算(例如平均评级),并且我的笔记本电脑(8GB RAM)开始交换.
Dask.dataframe懒惰地加载数据并尝试在一个线性扫描中通过数据集执行整个计算.令人惊讶的是,这通常是可行的.
智能地转储到磁盘也是一个可以管理的选项,特别是在需要随机播放时,但通常有办法解决这个问题.
两年后我碰巧来到这个页面,现在有一个简单的选项可以限制每个工作人员的内存使用量。我认为@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)
该数据仍然可用,并将在必要时从磁盘读回。