2016-02-29 16 views
8

Tôi đang sử dụng gói doSNOW và cụ thể hơn là chức năng parLapply để thực hiện phân loại lại (và sau đó là các hoạt động khác) trên danh sách các bộ dữ liệu raster lớn (OS: Windows x64).Xử lý song song các raster lớn trong R (cửa sổ)

Mã này trông hơi giống như ví dụ Minimalistic này:

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) 

Mã này thực sự hoạt động như dự kiến. Vấn đề xảy ra khi tôi muốn tiếp tục với kết quả. Tôi nhận được thông báo lỗi này:

> 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 

Theo tôi hiểu, vì raster khá lớn, chúng được lưu trong tệp tạm thời trên đĩa. Và khi tôi đóng cụm tuyết, các tệp này không thể truy cập được nữa.

Vì vậy, câu hỏi của tôi là, làm thế nào tôi có thể truy cập dữ liệu khi cụm được đóng? Tôi có thể tiếp tục sử dụng phương pháp này không?

Cảm ơn!

Trả lời

1

Tôi có vấn đề này chính xác khi chạy fucntion rasterize bên trong một cụm trong R.

Tất cả các xét nghiệm đã làm việc một cách hoàn hảo nhưng khi tôi mở rộng nhằm rasters độ phân giải rất lớn và tốt, tôi liên tục nhận được các lỗi liên quan đến các file tạm mà Tôi thậm chí không thể tìm thấy trên máy tính của tôi. Các đối tượng danh sách, mà tôi cần phải hợp nhất và viết như 1 raster, là trong R nhưng tôi không thể làm gì với nó.

Sau khi xem thư mục tệp tạm thời trong khi cụm đang chạy, tôi nhận thấy việc đóng cụm sẽ tự động xóa tất cả các tệp tạm thời được tạo, vì vậy tôi phải thực hiện các hàm hợp nhất và writeRaster bên trong cụm, nếu không nó sẽ thất bại trên lỗi rất giống với lỗi của bạn.

+0

Cảm ơn Sam!Nếu bạn nghĩ về nó, nó thực sự khá rõ ràng ... đã cố gắng và hoạt động như một sự quyến rũ. – Val

3

Bạn có thể vượt qua tên tập tin cụ thể để calc (hoặc, ví dụ, reclassify), và có chức năng của bạn trả lại những tên tập tin như một vector được đọc vào một chồng:

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

s <- stack(ff) 

Nhưng cũng nhìn vào ?clusterR - Tôi nghi ngờ nó sẽ hoạt động với reclassify. Từ tài liệu:

Chức năng này chỉ hoạt động với các chức năng có đối tượng Raster * làm đối số đầu tiên và hoạt động trên ô bằng ô (tức là không có hiệu ứng của ô) và trả về đối tượng cùng số ô như đối tượng raster đầu vào. Đối số đầu tiên của hàm được gọi phải là đối tượng Raster *. Chỉ có thể có một đối số Raster *. Ví dụ, nó làm việc với calc và nó cũng làm việc với lớp phủ miễn là bạn cung cấp một RasterStack hoặc RasterBrick đơn lẻ làm đối số đầu tiên.

+0

Tuy nhiên, khi tôi đang cố gắng truy cập dữ liệu sau khi cụm được đóng, R không thể tìm thấy tệp tempfile và trả về thông báo lỗi này: '> lô (s [[1]]) Lỗi trong .local (.Object, ...): C: \ Users \ ****** \ AppData \ Local \ Temp \ Rtmpsh1u3n \ file1e482e517fd9.tif 'không tồn tại trong hệ thống tệp, và không được nhận dạng làm tập dữ liệu được hỗ trợ name.' – Val

+0

Lạ - nó hoạt động cho tôi. Có thể thử lưu tệp vào một đường dẫn liên tục. – jbaums

+0

Cảm ơn. Tôi sẽ có một cái nhìn tại ClusterR mặc dù ... Tôi có thể đã chuyển từ này quá nhanh. Tôi cũng tìm thấy [this] (https://cran.r-project.org/web/packages/raster/vignettes/functions.pdf) có chức năng cluster trông đầy hứa hẹn. – Val

Các vấn đề liên quan