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
该数据仍然可用,必要时将从磁盘读回。
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
该数据仍然可用,必要时将从磁盘读回。