R并行计算与降雪 - 写入来自不同工人的文件

时间:2012-10-21 01:06:20

标签: r output snowfall

我使用降雪1.84包进行并行计算,并希望每个工作人员在计算过程中将数据写入自己的单独文件。这可能吗 ?如果是这样的话?

我正在使用“SOCK”类型连接,例如sfInit(parallel = TRUE,...,type =“SOCK”),并希望代码与平台无关(unix / windows)。

我知道可以在sfInit中使用“slaveOutfile”选项来定义写入日志文件的文件。但这是出于调试目的,所有从属/工作者必须使用相同的文件。我需要每个工人都有自己的OWN输出文件!

我需要编写的数据是大型数据帧,而不是简单的诊断消息。这些数据帧需要由从站输出,并且不能发送回主进程。 任何人都知道如何完成这项工作?

由于

1 个答案:

答案 0 :(得分:0)

一个简单的解决方案是使用sfClusterApply执行一个函数,在每个worker上打开一个不同的文件,将生成的文件对象分配给一个全局变量,这样你就可以在后续的并行操作中写入它: / p>

library(snowfall)
nworkers <- 3
sfInit(parallel=TRUE, cpus=nworkers, type='SOCK')
workerinit <- function(datfile) {
  fobj <<- file(datfile, 'w')
  NULL
}
sfClusterApply(sprintf('worker_%02d.dat', seq_len(nworkers)), workerinit)

work <- function(i) {
  write.csv(data.frame(x=1:3, i=i), file=fobj)
  i
}
sfLapply(1:10, work)
sfStop()