R(windows)中大栅格的并行处理

Val*_*Val 8 parallel-processing r raster mclapply snow

我正在使用doSNOW包,更具体地说是parLapply函数,用于在大栅格数据集列表(OS:Windows x64)上执行重新分类(以及随后的其他操作).

代码看起来有点像这个简约的例子:

library(raster)
library(doSNOW)

#create list containing test rasters

x <- raster(ncol=10980,nrow=10980) 
x <- setValues(x,1:ncell(x)) 

list.x <- replicate( 9 , x )

#setting up cluster

NumberOfCluster <- 8
cl <- makeCluster(NumberOfCluster)
registerDoSNOW(cl)
junk <- clusterEvalQ(cl,library(raster))

#perform calculations on each raster

list.x <- parLapply(cl,list.x,function(x) calc(x,function(x) { x * 10 }))

#stop cluster

stopCluster(cl)
Run Code Online (Sandbox Code Playgroud)

代码实际上按预期工作.当我想继续结果时会出现问题.我收到此错误消息:

> plot(list.x[[1]])
Error in file(fn, "rb") : cannot open the connection
In addition: Warning message:
In file(fn, "rb") :
  cannot open file 'C:\Users\*****\AppData\Local\Temp\RtmpyKYdpY\raster\r_tmp_2016-02-29_133158_752_67867.gri': No such file or directory
Run Code Online (Sandbox Code Playgroud)

据我所知,由于栅格非常大,它们被保存在磁盘上的临时文件中.当我关闭雪群时,这些文件不再被访问.

所以我的问题是,如何在群集关闭后访问数据?我可以继续使用这种方法吗?

谢谢!

Sam*_*Sam 1

我在 R 中的集群内运行光栅化函数时遇到了这个问题。

所有测试都运行良好,但是当我升级到非常大且高分辨率的栅格时,我反复出现有关临时文件的错误,我什至在计算机上找不到这些错误。我需要合并并编写为 1 个栅格的列表对象位于 R 中,但我无法对其执行任何操作。

在集群运行时查看临时文件目录后,我注意到关闭集群将自动删除创建的所有临时文件,因此我必须在集群内执行 merge 和 writeRaster 函数,否则它将失败并出现与以下非常相似的错误你的。