使用foreach写入R中的单个公共文件

使用foreach写入R中的单个公共文件,r,foreach,parallel-processing,R,Foreach,Parallel Processing,我在R中有一个并行进程,它应该将每个线程的结果保存到一个公共文件中。但这样做会造成问题,因为存在数据重叠。我在一个数据帧中进行聚合,最终可以一次性写入所有数据,但由于数据量很大,我希望确保在系统内存不足或发生其他情况时不会丢失数据。 如何写入一个文件并确保文件已锁定或数据已异步写入。我在Windows上运行代码以防万一,并使用doSNOW进行并行化 这是主要代码 HedgedPortfolio <- data.frame() cl<-makeCluster(6) registerD

我在R中有一个并行进程,它应该将每个线程的结果保存到一个公共文件中。但这样做会造成问题,因为存在数据重叠。我在一个数据帧中进行聚合,最终可以一次性写入所有数据,但由于数据量很大,我希望确保在系统内存不足或发生其他情况时不会丢失数据。 如何写入一个文件并确保文件已锁定或数据已异步写入。我在Windows上运行代码以防万一,并使用
doSNOW
进行并行化

这是主要代码

HedgedPortfolio <- data.frame()
cl<-makeCluster(6) 
registerDoSNOW(cl)
no<-length(X)
HedgedPortfolio<-foreach(i=1:no,.combine='rbind') %dopar%
{
  HedgeMain(as.Date(X[i]),InitPnlRecon)
}

stopCluster(cl)
HedgeMain<-function(X,InitPnlRecon)
{    
    OptimizedPort<-.............some computation                               
    write.table(OptimizedPort,file="C:/OptimizedAll.opt",     
                quote=FALSE,append=TRUE,sep=";",
                col.names = FALSE,row.names = FALSE)
    OptimizedPort
}

HedgedPortfolio我不认为R
write.
cat
函数为使用单个设计文件提供了必要的文件锁定功能。您需要访问支持此类功能的数据库,或者使用多个文件。从节点终止时增加的弹性要求来看,我觉得您并不是真的希望将其作为紧密耦合的流程运行,而是作为分布式批处理流程运行。中有一个“资源管理器和批处理调度器”部分,其中几个包听起来适用于此任务:特别是

最近有一次关于R-Help和HPC-SIG的讨论可能与此相关。线程从这里开始:


一些线程描述了一种由单独的CPU工作人员访问磁盘文件中间特定点的方法。您仍然需要自己的编码来正确地确保您没有覆盖“良好的数据”。

为时已晚,但由于我正在为代码寻找类似的工具,我的代码从pbdMPI包中找到了comm.write函数。根据文档,秩0创建了文件,然后写入其余秩,以便将数据附加到该文件。

类似问题: