簡體   English   中英

如何將變量傳遞給 spark_apply() 中調用的函數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM