r - R中的并行或雪包可以与火花簇接口吗?
问题描述
我正在处理 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 对象)?
解决方案
如果这可以解决您的问题(并且如果我理解正确的话),我会将您使用并行包的代码包装到 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)
})
问题是您的代码是否会以这种方式进行调整。
推荐阅读
- android - 当我在 gradle 文件中添加 UI Firestore 依赖项时,Android Studio 的地图活动中显示“无法访问 zzbfm”的错误
- javascript - 如何在反应中添加图像
- google-ads-api - 在 Google 数据洞察中创建新的计算字段 - 广告系列类型
- java - 发送特定的 POST 请求以接收 base64 格式的文本文件并在 WebView 中显示
- r - RDCOMClient + Outlook 电子邮件搜索使用 R 中的日期
- python-3.x - 处理 Tornado 的正确方法 read_bytes 方法
- c# - 尽管有 Console.ReadLine() 调用和更多代码,但 C# 控制台关闭
- xml - XSLT 匹配不同的条件
- java - 如何在java中打印所有目录和文件以及所有子目录和文件
- postgresql - 使用带有 PL/pgSQL 的 soci 进行变量绑定