Поддерживает ли clusterMap в Snow динамическую обработку?

Похоже, что clusterMap в Snow не поддерживает динамическую обработку. Я хотел бы выполнять параллельные вычисления с двумя парами параметров, хранящихся во фрейме данных. Но прошедшее время каждой работы сильно различается. Если задания выполняются нединамически, это займет много времени.

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)

person YYY    schedule 24.10.2013    source источник


Ответы (2)


Это правда, что 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 был добавлен в пакет snow.

Обратите внимание, что использование вами clusterMap на самом деле не требует от вас экспорта df_t, поскольку ваша рабочая функция не ссылается на него. Но если вы хотите экспортировать df_t в рабочие процессы, вы также можете использовать:

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

В этом случае df_t необходимо экспортировать в рабочие процессы кластера, поскольку на него ссылается рабочая функция. Однако, как правило, он менее эффективен, поскольку каждому рабочему потоку требуется только часть всего фрейма данных.

person Steve Weston    schedule 24.10.2013
comment
Я ценю ваш ответ. Это так полезно, не только решает мою проблему, но и просвещает меня. - person YYY; 25.10.2013

Я нашел clusterMap в пакете Parallel с поддержкой LB. Но он менее эффективен, чем метод clusterApplyLB в сочетании с lapply, реализованный Snow. Я попытался узнать исходный код, чтобы понять. Но clusterMap недоступен, когда я нажимаю ссылку 'source' и 'R code'.

Параллельный документ

person YYY    schedule 25.10.2013
comment
Если вы хотите увидеть исходный код clusterMap в параллельном пакете, просто выполните library(parallel); clusterMap. - person Steve Weston; 26.10.2013