Если это решит вашу проблему (и если я вас правильно понимаю), я бы обернул ваш код, использующий параллельный пакет, в функцию sparkR, например, spark.lapply
(или что-то подобное в sparklyr, с этим не имеет опыта).
Я предполагаю, что ваш кластер Spark основан на Linux, поэтому следует использовать функцию mcapply
из параллельного пакета (вместо makeCluster
и, следовательно, clusterExport
в Windows).
Например, локально выполняемая задача суммирования чисел в каждом элементе списка будет (в Linux):
library(parallel)
input = list(c(1,2,3), c(1,2,3,4), c(1,2,3,4,5))
res = mclapply(X=input, FUN=sum, mc.cores=3)
и выполнение одной и той же задачи 10000 раз с использованием кластера Spark:
input = list(c(1,2,3), c(1,2,3,4), c(1,2,3,4,5))
save(input, file="/path/testData.RData")
res = spark.lapply(1:10000, function(x){
library(parallel)
load("/path/testData.RData")
mclapply(X=input, FUN=sum, mc.cores=3)
})
Вопрос в том, будет ли ваш код таким образом подправлен.