我试图用dask加载数据集,但是当需要计算我的数据集时,我总是遇到这样的问题:
警告-工作者超出了95%的内存预算。重新启动。
我只是在本地计算机上工作,因此开始执行以下操作:
if __name__ == '__main__':
libmarket.config.client = Client() # use dask.distributed by default
现在,在错误消息中,我一直看到对“ memory_limit =”关键字参数的引用。但是,我已经彻底搜索了dask文档,无法弄清楚如何在单机配置中增加流血的worker内存限制。我有256GB的RAM,在将其转换回pandas数据帧之前,我将删除将来的大多数列(20GB的csv文件),因此我知道它将适合内存。我只需要从代码中增加每个工作人员的内存限制(不使用dask-worker),以便可以对其进行处理。
请,有人帮助我。
答案 0 :(得分:2)
自变量memory_limit
可以提供给__init()__
和Client
的{{1}}函数。
仅调用LocalCluster
是先调用Client()
,然后再使用创建的集群(Dask: Single Machine)LocalCluster()
的快捷方式。当在没有Client
实例的情况下调用Client
时,可以将LocalCluster
的所有可能参数提供给LocalCluster.__init()__
的初始化调用。因此,Client
类的API文档中未记录参数memory_limit
(以及其他参数,例如n_workers
)。
但是,似乎Client
的API文档中没有正确记录参数memory_limit
(请参见Dask GitHub Issue #4118)。
一个工作示例如下。我添加了更多参数,这可能对发现此问题/答案的人们很有用。
LocalCluster
快捷方式应该是
# load/import classes
from dask.distributed import Client, LocalCluster
# set up cluster and workers
cluster = LocalCluster(n_workers=4,
threads_per_worker=1,
memory_limit='64GB')
client = Client(cluster)
# have a look at your workers
client
# do some work
## ...
# close workers and cluster
client.close()
cluster.close()