如何使用spark.lapply()从用R编写的函数中返回局部变量值



我定义了一些用R语言编写的函数。。。现在我正在尝试使用">火花。lapply";以使函数并行化。确切地说,我在函数中定义了一个空向量,并且在函数中填充了值。

input_1:R数据帧(虹膜数据(

功能定义:

agg_sum <- function(RowNum){
test <- "Hello"
input_1$sum <- input_1$Sepal.Length + RowNum
}

函数调用

output_1 <- spark.lapply(1:5,function(RowNum) agg_sum(RowNum))

因此,如果我稍后在使用spark.lapply((调用函数后调用代码中的向量,我会得到错误:Error:object 'test' not found

只需返回一个列表,其中包含要从每次函数执行中导出的所有值。最好避免考虑全局或可变变量,并将计算想象为应用映射函数。

遵循您的样本代码:

library(SparkR, lib.loc = c(file.path(Sys.getenv("SPARK_HOME"), "R", "lib")))
sparkR.session(master = "local[4]", sparkConfig = list(spark.driver.memory = "2g"))
agg_fun <- function(row_num){
internal_var <- paste(c("Hello", row_num), collapse = "")
main_result <- row_num + 1000

list(internal_var = internal_var, main_result = main_result)
}
output_1 <- spark.lapply(1:3, function(RowNum) agg_fun(RowNum))

CCD_ 2与CCD_ 4一起计算CCD_。函数返回包含这两个值的列表。spark.lapply将结果组合在一起作为列表列表:

[[1]]
[[1]]$internal_var
[1] "Hello1"
[[1]]$main_result
[1] 1001

[[2]]
[[2]]$internal_var
[1] "Hello2"
[[2]]$main_result
[1] 1002

[[3]]
[[3]]$internal_var
[1] "Hello3"
[[3]]$main_result
[1] 1003

然后,如果只想选择internal_var值,请对它们进行迭代:

> sapply(output_1, FUN = function(x) x$internal_var)
[1] "Hello1" "Hello2" "Hello3"

最新更新