带有降雪的 R 并行计算 - 从不同的工作人员写入文件

标签 r output snowfall

我正在使用 snowfall 1.84 包进行并行计算,并希望每个工作人员在计算期间将数据写入其自己的单独文件。这可能吗 ?如果是怎么办?

我正在使用“SOCK”类型的连接,例如 sfInit( parallel=TRUE, ...,type="SOCK") 并且希望代码独立于平台 (unix/windows)。

我知道可以使用 sfInit 中的“slaveOutfile”选项来定义写入日志文件的文件。但这是为了调试目的,所有的奴隶/ worker 必须使用相同的文件。我需要每个 worker 都有自己的输出文件!!!

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

谢谢

最佳答案

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

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()

关于带有降雪的 R 并行计算 - 从不同的工作人员写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12994063/

相关文章:

c - 为什么\b 在字符串中间使用时会删除在\b 之前写入的一个字符,但在末尾使用时却不会?

c++ - 编译器无法推断出要返回哪种模板类型

excel - VBA Excel将数据打印到有关范围数据的即时窗口中以测试理解

r - 如何使用动画 ggplot2-plot 管理并行处理?

c - 使用 C 和并行化在 R 中快速关联

r - 并行运行时写入全局环境

r - 如何在申请家庭内分配?

将 ggplot2 map 旋转到任意角度

r - ggplot2 2.1.0 破坏了我的代码?次要变换轴现在显示不正确

r - 如何将要在 SAS、SPSS 或 STATA 中使用的数据导入 R?