Snow中的clusterMap是否支持动态处理?

时间:2013-10-24 21:05:40

标签: r parallel-processing snow

Snow中的clusterMap似乎不支持动态处理。我想用存储在数据帧中的两对参数进行并行计算。但是每个工作的经过时间差别很大。如果作业是非动态运行的,那将非常耗时。

e.g。

library(snow)
cl2 <- makeCluster(3, type = "SOCK") 
df_t <- data.frame (type=c(rep('a',3),rep('b',3)), value=c(rep('1',3),rep('2',3)))
clusterExport(cl2,"df_t")
clusterMap(cl2, function(x,y){paste(x,y)},
           df_t$type,df_t$value)

2 个答案:

答案 0 :(得分:1)

clusterMap确实不支持动态处理,但代码中有一条评论表明它可能会在将来实施。

与此同时,我会根据数据创建一个列表,以便使用稍微不同的工作函数调用clusterApplyLB

ldf <- lapply(seq_len(nrow(df_t)), function(i) df_t[i,])
clusterApplyLB(cl2, ldf, function(df) {paste(df$type, df$value)})

这在将clusterMap添加到雪包中之前很常见。

请注意,使用clusterMap实际上并不要求您导出df_t,因为您的工作人员功能并未引用它。但是,如果您愿意将df_t导出给工人,您也可以使用:

clusterApplyLB(cl2, 1:nrow(df_t), function(i){paste(df_t$type[i],df_t$value[i])})

在这种情况下,必须将df_t导出到集群worker,因为worker函数引用它。但是,由于每个工作人员只需要整个数据帧的一小部分,因此效率通常较低。

答案 1 :(得分:0)

我在Parallel包支持LB中找到了clusterMap。但它的效率低于clusterApplyLB与Snow实现的lapply相结合的方法。我试图找出要弄清楚的源代码。但是当我点击链接'source''R code'时,clusterMap不可用。

Parallel Doc