1

我正在处理 R 中的一个计算密集型包。这个包没有与 Spark 集群接口的替代实现;但是,它确实有一个可选参数来接收使用并行包创建的集群。我的问题是我可以使用 SparklyR 之类的东西连接到火花集群,然后使用该火花集群作为 makeCluster 命令的一部分传递到我的函数中吗?

我已经成功地让集群与并行工作,但我不知道如何或是否可以利用 spark 集群。

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')

然后利用 makeCluster() 函数中的连接(sc 对象)?

4

1 回答 1

0

如果这可以解决您的问题(并且如果我理解正确的话),我会将您使用并行包的代码包装到 sparkR 函数中,例如spark.lapply(或 sparklyr 中类似的东西,没有这方面的经验)。

我假设您的 Spark 集群是基于 Linux 的,因此应该使用并行包中的功能mcapply(而不是在 Windows 上使用)。makeClusterclusterExport

例如,在列表的每个元素中汇总数字的本地执行任务将是(在 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)

并使用 Spark 集群执行相同的任务 10000 次:

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)
                    })

问题是您的代码是否会以这种方式进行调整。

于 2019-05-20T14:10:52.360 回答