1

It seems clusterMap in Snow doesn't support dynamic processing. I'd like to do parallel computing with two pairs of parameters stored in a data frame. But the elapsed time of every job vary very much. If the jobs are run un-dynamically, it will be time consuming.

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

2 回答 2

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必须将其导出到集群工作者,因为工作者函数引用它。但是,它通常效率较低,因为每个工作人员只需要整个数据帧的一小部分。

于 2013-10-24T22:22:12.840 回答
0

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

平行文件

于 2013-10-25T15:28:46.120 回答