【发布时间】:2018-06-24 04:51:27
【问题描述】:
我对 Spark 很陌生,我尝试在网上寻找一些东西,但我没有找到任何令人满意的东西。
我一直使用命令mclapply 运行并行计算,我喜欢它的结构(即,第一个参数用作滚动索引,第二个参数是要并行化的函数,然后是传递给函数的其他可选参数)。
现在我正在尝试通过 Spark 做同样的事情,即我想在 Spark 集群的所有节点之间分配我的计算。这就是我所学到的以及我认为代码应该如何构造的内容(我正在使用包sparklyr):
- 我使用命令
spark_connect创建到 Spark 的连接; - 我使用
copy_to在 Spark 环境中复制我的 data.frame,并通过其 tibble 访问它; - 我想实现
mclapply的“Spark-friendly”版本,但我看到包中没有类似的功能(我看到SparkR包中存在函数spark.lapply,但不幸的是,它不再在 CRAN 中了)。
下面是我实现的一个简单的测试脚本,它使用函数mclapply 工作。
#### Standard code that works with mclapply #########
dfTest = data.frame(X = rep(1, 10000), Y = rep(2, 10000))
.testFunc = function(X = 1, df, str) {
rowSelected = df[X, ]
y = as.numeric(rowSelected[1] + rowSelected[2])
return(list(y = y, str = str))
}
lOutput = mclapply(X = 1 : nrow(dfTest), FUN = .testFunc, df = dfTest,
str = "useless string", mc.cores = 2)
######################################################
###### Similar code that should work with Spark ######
library(sparklyr)
sc = spark_connect(master = "local")
dfTest = data.frame(X = rep(1, 10000), Y = rep(2, 10000))
.testFunc = function(X = 1, df, str) {
rowSelected = df[X, ]
nSum = as.numeric(rowSelected[1] + rowSelected[2])
return(list(nSum = nSum, str = str))
}
dfTest_tbl = copy_to(sc, dfTest, "test_tbl", overwrite = TRUE)
# Apply similar function mclapply to dfTest_tbl, that works with
# Spark
# ???
######################################################
如果有人已经找到了解决方案,那就太好了。其他参考/指南/链接也非常受欢迎。谢谢!
【问题讨论】:
标签: r apache-spark parallel-processing sparklyr mclapply