2017-10-18 20 views
0

私はspark_applyの中にカスタムR関数を渡そうとしていますが、問題を抱え続けて、エラーの意味を理解できません。sparklyr spark_applyユーザ定義関数のエラー

library(sparklyr) 
sc <- spark_connect(master = "local") 
perf_df <- data.frame(predicted = c(5, 7, 20), 
         actual = c(4, 6, 40)) 


perf_tbl <- sdf_copy_to(sc = sc, 
         x = perf_df, 
         name = "perf_table") 

#custom function 
ndcg <- function(predicted_rank, actual_rank) { 
    # x is a vector of relevance scores 
    DCG <- function(y) y[1] + sum(y[-1]/log(2:length(y), base = 2)) 
    DCG(predicted_rank)/DCG(actual_rank) 
} 

#works in R using R data frame 
ndcg(perf_df$predicted, perf_df$actual) 


    #does not work 
    perf_tbl %>% 
    spark_apply(function(e) ndcg(e$predicted, e$actual), 
       names = "ndcg") 

答えて

0

[OK]を2つの可能な問題が表示されます。

(1)-spark_applyつのパラメータを持つ関数、データフレーム

を好む(2) - あなたはどのように複雑な機能で依存パッケージを作成する必要があるかもしれません。

のは、あなたがndcgを変更しましょうパラメータとしてデータフレームを受信する。

ndcg <- function(dataset) { 
    predicted_rank <- dataset$predicted 
     actual_rank <- dataset$actual 
     # x is a vector of relevance scores 
     DCG <- function(y) y[1] + sum(y[-1]/log(2:length(y), base = 2)) 
     DCG(predicted_rank)/DCG(actual_rank) 
} 

そして、あなたはndcg_package

というパッケージに今、あなたのコードはのようになりますことを置く:

メモリからこれを行う
spark_apply(perf_tbl, ndcg, packages = TRUE, names = "ndcg") 

ので、いくつかのタイプミスがあるかもしれないが、それあなたを近づけるでしょう。

関連する問題