【问题标题】:sparklyr spark_apply user defined function errorsparklyr spark_apply 用户定义函数错误
【发布时间】:2018-03-30 20:03:36
【问题描述】:

我正在尝试在 spark_apply 中传递一个自定义 R 函数,但一直遇到问题并且无法弄清楚某些错误的含义。

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")

【问题讨论】:

    标签: r sparklyr


    【解决方案1】:

    好的,我看到了两个可能的问题。

    (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")
    

    凭记忆做这个,所以可能会有一些错别字,但它会让你接近。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-20
      • 2018-11-17
      • 2018-08-21
      • 2019-03-16
      • 2019-10-21
      • 1970-01-01
      • 1970-01-01
      • 2018-11-01
      相关资源
      最近更新 更多