R遇到致命错误并终止;在我导出500GB数据并且此后无法读取任何文件之后

问题描述

我试图处理一批Himawari-8数据并将其导出到我想要的tif文件中。我使用的代码如下:

library(raster)
library(ncdf4)
library(rgdal)
library(DoParallel)
library(foreach)

lst <- list.files(path="D:\\0619\\",pattern='nc$',full.names=TRUE)
detectCores()

usecores <- detectCores-10
cl <- makeCluster(usecores)
registerDoParallel(cl)

foreach(i =1:143) %dopar% {
  library(raster)                                                                                                                                                                                                                                                                                                     
  library(ncdf4) 
  library(rgdal)
  nc<-nc_open(lst[3])
  r1<-raster(lst[i],var='albedo_01')
  r2<-raster(lst[i],var='albedo_02')
  r3<-raster(lst[i],var='albedo_03')
  r4<-raster(lst[i],var='albedo_04')
  
  rg <-0.6321*r2+0.2928*r3+0.0715*r4
  rr <- brick(r3,rg,r1)
  name <- strsplit(lst[i],"\\_")
  tifname <- paste("H8_VIS_",name[[1]][3],"_",name[[1]][4],"_FLDK",sep="")
  rw <- writeraster(rr,filename = paste("E:\\H8_VIS_data\\20190619\\",tifname,".tif",sep=""),format = 'GTiff')
}
stopCluster(cl)

代码可在我的PC上运行,并导出近500GB的数据。有一天,它出了错并且报告了错误

R encoutered a Fatal error
The session was terminated

我在寻找解决方案,尝试卸载R和RStudio删除我可以找到的所有R文件,重新启动PC并在conda中安装R&RStudio。 然后,它的效果很好。处理完两个H-8 netcdf数据(每个600MB)后。 R再次崩溃并报告了相同的错误。 ############################################### ##################

我以为这是我的PC没有足够的RAM,所以我在性能非常高的计算机上运行它。导出大约500GB数据后,R报告错误

error in unserialize(socklist[[n]]): error reading from connection

然后我停止并行运行代码,导出两个结果后,R崩溃并显示

R encoutered a Fatal error
The session was terminated

这台高性能计算机上的R无法正常工作。我使用了gc(),但是它不起作用。我认为在数据处理过程中,一些垃圾存储在某个地方,并且超出了R的存储范围。

请告诉我如何解决此问题。非常感谢!

#######

我只是发现,从一个文件中读取光栅不会终止。

r1 <- raster("D:/0619/h8_201906190000.nc",var = 'albedo_1')

从列表中读取文件时将终止。 (这次我没有要求并行化。由于这两个代码,它被炸了。)

list <- list.files(path="D:\\0619\\",full.names=TRUE)
r1 <- raster(list[1],var = 'albedo_1')

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)