【问题标题】:R parallel computing with snowfall - writing to files from separate workers降雪的 R 并行计算 - 从不同的工作人员写入文件
【发布时间】:2012-10-11 05:42:09
【问题描述】:

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

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

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

我需要写入的数据是大型数据帧,而不是简单的诊断消息。这些数据帧需要由从属进程输出,不能发回主进程。 有谁知道我怎么能做到这一点?

谢谢

【问题讨论】:

  • 我很好奇。你为什么要这个?

标签: r output snowfall


【解决方案1】:

一个简单的解决方案是使用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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-19
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 2019-02-15
    • 1970-01-01
    • 2016-05-21
    相关资源
    最近更新 更多