2013-10-24 2 views
1

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

например.

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) 

ответ

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 должен быть экспортирован в кластере рабочих, так как ссылки функции работника его. Однако он, как правило, менее эффективен, поскольку каждому работнику требуется только часть всего кадра данных.

+0

Я ценю ваш ответ. Это так полезно, не только для решения моей проблемы, но и для меня. – YYY

0

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

Parallel Doc

+1

Если вы хотите увидеть источник для 'clusterMap' в параллельном пакете, просто выполните' library (parallel); clusterMap'. –

Смежные вопросы