我正在处理R中的计算密集型包。此包没有与 Spark 群集接口的替代实现;但是,它确实有一个可选参数,用于接收使用并行包创建的群集。我的问题是,我是否可以使用 SparklyR 之类的东西连接到 Spark 集群,然后将该火花集群用作 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')
然后利用makeCluster((函数中的连接(sc对象(?
如果这可以解决您的问题(如果我理解正确(,我会将使用并行包的代码包装到 sparkR 函数中,例如 spark.lapply
(或Sparklyr中的类似内容,没有这方面的经验(。
我假设您的 Spark 集群是基于 Linux 的,因此应该使用并行包中的mcapply
函数(而不是 Windows 上的makeCluster
和随之而来的clusterExport
(。
例如,对列表的每个元素中的数字求和的本地执行任务将是(在 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)
})
问题是你的代码是否以这种方式进行调整。