Я пишу функцию, которая обрабатывает несколько очень больших таблиц 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)