2016-02-29 38 views
8

我使用的是doSNOW包,更具体地说是parLapply函数对大栅格数据集(操作系统:Windows x64)列表执行重分类(以及后续的其他操作)。R中的大栅格并行处理(windows)

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

library(raster) 
library(doSNOW) 

#create list containing test rasters 

x <- raster(ncol=10980,nrow=10900) 
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) 

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

> 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 

据我了解,因为栅格是相当大的,它们被保存在磁盘上的临时文件。当我关闭雪群时,这些文件无法再被访问。

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

谢谢!

回答

1

我而R.

所有的测试工作完全运行在群集内的光栅化温控功能有这种确切的问题,但是当我缩放为非常大的,精细的分辨率栅格,我多次得到了关于临时文件的错误,我甚至找不到我的电脑。列表对象,我需要合并和写入1栅格,在R中,但我无能为力。

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

+0

谢谢山姆!如果你想到它,这实际上是相当明显的......尝试并像魅力一样工作。 – Val

3

你可以通过特定的文件名calc(或者,例如,reclassify),并有你的函数返回的文件名作为载体读入堆栈:

ff <- parSapply(cl, list.x, function(x) { 
    calc(x, function(x) x*10, filename=f <- tempfile(fileext='.tif')) 
    f 
}) 

s <- stack(ff) 

还看?clusterR - 我怀疑它会与reclassify一起使用。从该文档:

此功能仅与具有栅格*对象作为第一个参数,由小区的基础上的小区,其操作功能有效(即,不存在neigboring细胞的效果),并返回与对象与输入栅格对象相同数量的单元格。被调用函数的第一个参数必须是Raster *对象。只能有一个Raster *对象参数。例如,它适用于calc,只要您提供一个RasterStack或RasterBrick作为第一个参数,它也可以与覆盖一起使用。

+0

但是,当我试图在集群关闭后访问数据时,R无法找到临时文件并返回此错误消息:'> plot(s [[1]]) .local错误.Object:...): C:\ Users \ ****** \ AppData \ Local \ Temp \ Rtmpsh1u3n \ file1e482e517fd9.tif'在文件系统中不存在, 并且不被识别为受支持的数据集名字。' – Val

+0

奇怪 - 它适用于我。也许尝试将文件保存到持久路径。 – jbaums

+0

谢谢。尽管我会再看看ClusterR ......我可能已经从这个过程中转移得太快了。我还发现[this](https://cran.r-project.org/web/packages/raster/vignettes/functions.pdf),它具有看起来很有希望的集群功能。 – Val