2017-09-21 25 views
1

私はsparklyrのspark_applyによって呼び出される関数に余分な変数を渡すことができるようにしたいと思います。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) 

もっと良い方法がありますか?

答えて

1

私はスパークをテストするように設定していませんが、クロージャを作成するだけでよいですか?

kmeanswithk <- function(k) {force(k); function(x) kmeans(x, k)$centers}) 
k <- 3 
res <- spark_apply(df1, kmeanswithk(k)) 

基本的に関数を作成して関数を返し、それを使用します。

関連する問題