我正在处理一个不适合内存的大数据集,因此缓存是唯一的选择。
首先,Dask的文档在缓存方面非常混乱。有关该主题的2个不同部分提出了类似的解决方案。
其次,缓存到磁盘似乎在我的代码中不起作用。我尝试了上面列出的两种方法。我实例化一个Cache / Chest对象并在全局注册它,设置同步或线程或多处理调度程序。
缓存机制失败:它填满了整个ram + swap内存,忽略了available_memory
参数。每当我指定缓存路径时,我都看不到.keys
文件在大小方面的增长。
如何有效地溢出到磁盘?
使用Dask v0.17.0,cachey v0.1.1,cloudpickle 0.5.2
答案 0 :(得分:0)
将磁盘溢出到磁盘的最简单方法就是使用较新的dask.distributed调度程序(在单个机器上运行良好)。尝试运行以下内容:
# set env var QS if quesry string has site=(eu|jp|in)
RewriteCond %{QUERY_STRING} (?:^|&)site=(eu|jp|in)(?:&|$) [NC]
RewriteRule ^ - [E=QS:%1]
# now use value stored in QS variable
RewriteCond %{ENV:QS} ^(.+)$
RewriteRule ^/?fetchHomePage\.action$ https://example.com/%1? [R=301,L,NC]
RewriteCond %{ENV:QS} ^(.+)$
RewriteRule ^/?fetchFirstPage\.action$ https://example.com/firstPage/%1? [R=301,L,NC]
RewriteCond %{ENV:QS} ^(.+)$
RewriteRule ^/?fetchSecondPage\.action$ https://example.com/secondPage/%1? [R=301,L,NC]
默认情况下,所有计算都应该使用此调度程序(除非您使用from dask.distributed import Client
client = Client()
显式覆盖)。默认情况下,此调度程序将处理溢出到磁盘。
请注意,第一个链接中提到的机会缓存与溢出到磁盘以避免内存问题非常不同。