[英]How to pass variables to functions called in spark_apply()?
我希望能夠將額外的變量傳遞給在 sparklyr 中由 spark_apply 調用的函數。
例如:
# setup
library(sparklyr)
sc <- spark_connect(master='local', packages=TRUE)
iris2 <- iris[,1:(ncol(iris) - 1)]
df1 <- sdf_copy_to(sc, iris2, repartition=5, overwrite=T)
# This works fine
res <- spark_apply(df1, function(x) kmeans(x, 3)$centers)
# This does not
k <- 3
res <- spark_apply(df1, function(x) kmeans(x, k)$centers)
作為一個丑陋的解決方法,我可以通過將值保存到 R 包中,然后引用它們來做我想做的事。 即
> myPackage::k_equals_three == 3
[1] TRUE
# This also works
res <- spark_apply(df1, function(x) kmeans(x, myPackage::k_equals_three)$centers)
有沒有更好的方法來做到這一點?
我沒有設置 spark 來測試,但你能創建一個閉包嗎?
kmeanswithk <- function(k) {force(k); function(x) kmeans(x, k)$centers})
k <- 3
res <- spark_apply(df1, kmeanswithk(k))
基本上只是創建一個函數來返回一個函數然后使用它。
spark_apply()
現在有一個context
參數供您將其他對象/變量/等傳遞給環境。
res <- spark_apply(df1, function(x, k) {
kmeans(x, k)$cluster},
context = {k <- 3})
或
k <- 3
res <- spark_apply(df1, function(x, k) {
kmeans(x, k)$cluster},
context = {k})
R 文檔不包含任何帶有上下文參數的示例,但您可以通過閱讀 PR 了解更多信息: https : //github.com/rstudio/sparklyr/pull/1107 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.