2016-02-29 71 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