Экспорт различных подмножеств data.tables для каждого узла в кластере - PullRequest
0 голосов
/ 11 мая 2018

Я пишу функцию, которая обрабатывает несколько очень больших таблиц data.table, и я хочу распараллелить эту функцию на компьютере с Windows.

Я мог бы сделать это с пакетом snow, используя clusterExport, чтобы создать копию каждого из data.tables для каждого узла в кластере.Однако это не работает, потому что он использует слишком много памяти.

Я хочу исправить это, экспортировав разные подмножества data.tables в каждый узел, однако я не вижу, как это сделать в пакете snow.

ВотПример кода, который работает, но неэффективно использует память:

library(snow)
dd <- data.frame(a = rep(1:5, each = 2), b = 11:20)
cl <- makeCluster(2, type = "SOCK")
clusterExport(cl = cl, "dd")
clusterApply(cl, x = c(2,7),  function(thresh) colMeans(dd[dd$a < thresh,]))
stopCluster(cl)

Вот пример кода, который не работает, но объясняет, как мы хотели бы распределить подмножества dd по узлам:

library(snow)
dd <- data.frame(a = rep(1:5, each = 2), b = 11:20)
cl <- makeCluster(2, type = "SOCK")

dd_exports <- lapply(c(2,7), function(thresh) dd[dd$a < thresh])
#Now we export the ith element of dd_exports to the ith node:
clusterExport(cl = cl, dd_exports) 
clusterApply(cl, x = c(2,7),  function(x) colMeans(dd))
stopCluster(cl)
...