【问题标题】:Concat_ws() function in Sparklyr is missingSparklyr 中的 Concat_ws() 函数丢失
【发布时间】:2019-03-17 19:33:00
【问题描述】:

我正在学习有关网络 (Adobe) 分析的教程,我想在其中构建马尔可夫链模型。 (http://datafeedtoolbox.com/attribution-theory-the-two-best-models-for-algorithmic-marketing-attribution-implemented-in-apache-spark-and-r/)。

在示例中,他们使用了以下功能: concat_ws(来自库(sparklyr))。但看起来该函数不存在(在安装包并调用库后,我收到一个函数不存在的错误......)。

评论作者: concat_ws 是一个 Spark SQL 函数: https://spark.apache.org/docs/2.2.0/api/java/org/apache/spark/sql/functions.html 因此,您必须依靠 sparklyr 才能使该功能正常工作。

我的问题:是否有解决方法可以访问 concat_ws() 函数?我试过了:

函数的目标是什么? 使用给定的分隔符将多个输入字符串列连接到一个字符串列中。

【问题讨论】:

    标签: r sparklyr


    【解决方案1】:

    您可以简单地使用来自基本 R 的paste

    library(sparklyr)
    library(dplyr)
    
    config <- spark_config()
    sc <- spark_connect(master = "local", config = config)
    
    df <- as.data.frame(cbind(c("1", "2", "3"), c("a", "b", "c")))
    sdf <- sdf_copy_to(sc, df, overwrite = T)
    
    sdf %>%
      mutate(concat = paste(V1, V2, sep = "-"))
    

    【讨论】:

      【解决方案2】:

      您找不到该函数,因为它在 sparklyr 包中不存在。 concat_ws 是一个 Spark SQL 函数 (org.apache.spark.sql.functions.concat_ws)。

      sparklyr 依赖于 SQL 转换层 - 函数调用被转换为带有 dbplyr 的 SQL 表达式:

      > dbplyr::translate_sql(concat_ws("-", foo, bar))
      <SQL> CONCAT_WS('-', "foo", "bar")
      

      这意味着该函数只能在sparklyr上下文中应用:

      sc <- spark_connect(master = "local[*]")
      df <- copy_to(sc, tibble(x="foo", y="bar"))
      
      df %>% mutate(xy = concat_ws("-", x, y))
      # # Source: spark<?> [?? x 3]
      #   x     y     xy     
      # * <chr> <chr> <chr>  
      # 1 foo   bar   foo-bar
      

      【讨论】:

        猜你喜欢
        • 2017-05-14
        • 1970-01-01
        • 2017-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-15
        • 2021-09-02
        • 1970-01-01
        相关资源
        最近更新 更多