R遇到致命错误并终止;导出500GB数据后,可以';从那以后我再也没有读过任何文件

R遇到致命错误并终止;导出500GB数据后,可以';从那以后我再也没有读过任何文件,r,parallel-processing,ram,terminate,R,Parallel Processing,Ram,Terminate,我试图处理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 <- detect

我试图处理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)
我寻找解决方案,尝试卸载R和RStudio,删除我能找到的任何R文件,重新启动PC并在conda中安装R&RStudio。 然后,它对一口井起作用。在我处理两个H-8 netcdf数据(每个600MB)之后。R再次崩溃并报告了相同的错误。 ####################################################################

我以为我的电脑没有足够的内存,所以我在一台高性能的电脑上运行这个。导出约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')

G
中的
r1应为
Gb
GiB
。而
M
MiB
Mb
。您的问题每次都会出现在程序的同一阶段,因此无法从错误消息中准确猜测发生了什么。这是hadley的书的舞台,这本书是要走的路。只是对你的并行化策略的一点评论:你只需要在循环中使用
1:143
,但要将
lst
导出给每个工作人员。如果
lst
是一个大文件,这可能会导致问题。尝试仅将所需的
lst
列表项导出到相应的工作人员,您可以使用
foreach
循环中的
itertools
来完成此操作谢谢Oliver。我说的是GB和MB。我认为调试需要运行前面的代码,而我的R和RStudio在一开始就崩溃了。@starja嗨,我想这就是R一开始崩溃的原因。你知道怎么修吗?我现在可以从列表中读取文件。R将终止。抱歉,它被称为
迭代器
。看看这些小插曲:以及
r1 <- raster("D:/0619/h8_201906190000.nc",var = 'albedo_1')
list <- list.files(path="D:\\0619\\",pattern='nc$',full.names=TRUE)
r1 <- raster(list[1],var = 'albedo_1')