"Сбой во время ввода-вывода растра", возможно, связан с размером растра? - PullRequest
0 голосов
/ 28 мая 2020

У меня очень большие растры в R. У меня есть код, который мне удавалось запускать раньше, с такими же большими растрами, но когда я снова пытаюсь запустить свой код для воспроизводимости, я получаю ту же ошибку " Ошибка во время ввода-вывода растра ».

Например, в этом разделе кода я пытаюсь разбить большой растр (~ 5 ГБ) на более мелкие фрагменты, чтобы ускорить время обработки в R.

large_raster <- stack("D:/large_raster.tif")
tileno <- 2 # split the large raster into 2 tiles

cl <- makeCluster(3)
registerDoSNOW(cl)
foreach(i = 1:nlayers(large_raster))%dopar%{
  library(raster)
  library(SpaDES)
  removeTmpFiles(h=0)
  newraster <- splitRaster(large_raster[[i]],nx=tileno,ny=1)
  for(j in 1:length(newraster)){
    if(i<10){
      writeRaster(newraster[[j]], filename=paste("D:/large_raster_layer0", i, "_tile", j, ".tif",sep=""))
    }else{
      writeRaster(newraster[[j]],filename=paste("D:/large_raster_layer", i, "_tile", j, ".tif",sep = ""))
    }
  }  
}
stopCluster(cl)

#stack tiles
dir <- ("D:/")
for(j in 1:tileno){
  tiles<-list.files(dir,pattern=paste("tile",j,sep=""))
  for(i in 1:length(tiles)){
    r<-raster(paste(dir,tiles[i],sep=""))
    if(i==1){s<-stack(r)
    }else{s<-stack(s,r)}
  }
  writeRaster(s, filename = paste("D:/large_raster_tile", j, ".tif", sep=""))
}

Но я получаю сообщение об ошибке

Error in rgdal::getRasterData(object@file@con, offset = offs, region.dim = reg,  : 
  Failure during raster IO

Если я пропущу этап мозаики и просто буду работать с моими 5 ГБ large_raster, я снова получаю ошибку в этом коде, где я создаю новый растр с именем wfps_growSeas путем наложения двух других растров с именами dswe2wfps и swt:

cl <- makeCluster(3)
registerDoSNOW(cl)

wfps_growSeas <- foreach(j = 1:nlayers(dswe2wfps))%dopar%{
  library(raster)
  overlay(dswe2wfps[[j]],swt[[j]], fun=function (x,y){
    x[y[]<=5]<-0
    return (x)},filename=paste("D:/temp2delete/raster",j, "_", info, ".tif",sep=""),overwrite=TRUE)
}  
stopCluster(cl)

wfps_growSeas <- stack(wfps_growSeas)

И получаю сообщение об ошибке:

Error in { : task 1 failed - "Failure during raster IO

Странно , эти ошибки произошли недавно. Через несколько недель после go я смог запустить этот точный код с такими же большими растрами, и в настоящее время я могу запускать эти закодированные, используя меньшие растры. Я использую R-3.6.2, но коллеги предположили, что эта ошибка обычно связана с размером растра и объемом памяти R. Этот пост предполагает, что эта ошибка вызвана повреждением растров, но я не думаю, что это проблема. Есть предложения?

Ответы [ 2 ]

0 голосов
/ 04 июня 2020

Проблема была решена путем изменения моих папок (и растров, сохраненных в этих папках) с диска D (внешний жесткий диск с объемом памяти 2 ТБ solid) на диск C моего компьютера. Я все еще могу запускать коды, работающие с меньшими размерами растров, прямо на моем диске D (на котором в данном случае на самом деле все еще оставалось много памяти).

0 голосов
/ 29 мая 2020

вероятно, потому что у вас нет места на диске, в основном как во временной папке. Очистите временную папку и / или установите ее в другое место. См. ?rasterOptions

...