2012-10-21 20 views
2

我使用并行计算的降雪1.84软件包并希望每位工作人员在计算过程中将数据写入其自己的单独文件。这可能吗 ?如果是的话如何?我正在使用“SOCK”类型的连接,例如,sfInit(parallel = TRUE,...,type =“SOCK”),并希望代码与平台无关(unix/windows)。R并行计算与降雪 - 写入单独工作人员的文件

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

我需要写的数据是大型数据框,而不是简单的诊断信息。这些数据帧需要从服务器输出,不能发回主进程。 任何人都知道我可以怎么做到这一点?

感谢

+1

我很好奇。你为什么要这样? – Roland

回答

0

一个简单的解决方案是使用sfClusterApply执行打开每个工人的不同文件中的函数,分配生成的文件对象到一个全局变量,所以你可以在随后的并行操作写它:

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() 
相关问题