我需要在spark_apply
软件包中使用带有sparklyr
函数的R软件包。 rdocumentation不太清楚。我尝试通过遵循此link使spark_apply
工作。它在第一部分中进行了以下修改。
工作部分:
library(sparklyr)
spark_apply_bundle(packages = T, base_path = getwd())
bundle <- paste(getwd(), list.files()[grep("\\.tar$",list.files())][1], sep = "/")
hdfs_path <- "hdfs://<my-ip>/user/hadoop/R/packages/packages.tar"
system("hdfs dfs -moveFromLocal", bundle, "hdfs://<my-ip>/user/hadoop/R/packages")
config <- spark_config()
config$sparklyr.shell.files <- "hdfs://<my-ip>/user/hadoop/R/packages/packages.tar"
sc <- spark_connect(master = "yarn-client",
version = "2.4.0",
config = config)
mtcars_sparklyr <- copy_to(sc, mtcars)
但是,当我尝试在svm
中使用spark_apply
函数时,使用packages
参数却无法使用。
result <- mtcars_sparklyr %>%
spark_apply(
function(d) {
fit <- svm(d$mpg, d$wt)
sum(fit$residuals ^ 2)
},
group_by = "cyl",
packages = bundle
)
另一方面,以下内容有效。这是如果我在svm
中传递了context
函数。但是,我需要packages
参数起作用,因为我有几个软件包及其功能可以在spark_apply
中使用。
result <- mtcars_sparklyr %>%
spark_apply(
function(d) {
fit <- svm(d$mpg, d$wt)
sum(fit$residuals ^ 2)
},
group_by = "cyl",
context = {svm <- e1071::svm}
)