Могут ли параллельные или снежные пакеты в R взаимодействовать с искровым кластером? - PullRequest
1 голос
/ 22 марта 2019

Я имею дело с вычислительно-интенсивным пакетом в R. Этот пакет не имеет альтернативных реализаций, взаимодействующих с кластером Spark, однако у него есть необязательный аргумент для получения в кластере, созданном с помощью параллельного пакета.У меня вопрос: могу ли я подключиться к кластеру искр, используя что-то вроде SparklyR, а затем использовать этот кластер искр как часть команды makeCluster для передачи в мою функцию?

Я успешно получил кластер, работающий с параллелью, ноЯ не знаю, как или можно ли использовать искровые кластеры.

library(bnlearn)
library(parallel)

my_cluster <- makeCluster(3)
...
pc_structure <- pc.stable(train[,-1], cluster = my_cluster)

Мой вопрос: можно ли подключиться к искровому кластеру следующим образом:

sc <- spark_connect(master = "yarn-client", config = config, version = '1.6.2')

, а затем использоватьсоединение (объект sc) в функции makeCluster ()?

1 Ответ

0 голосов
/ 20 мая 2019

Если это решит вашу проблему (и если я вас правильно понимаю), я бы обернул ваш код, использующий параллельный пакет, в функцию 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)
                    })

Вопрос в том, будет ли ваш код таким образом подправлен.

...