【问题标题】:What aggregation functions can be used with sdf_pivot in sparklyr?sparklyr 中的 sdf_pivot 可以使用哪些聚合函数?
【发布时间】:2017-11-20 23:41:48
【问题描述】:

尝试将sdf_pivotsparklyr 的开发版本一起使用。唯一似乎有效的聚合函数是count。如果我尝试 sumavg 我会得到一个异常声明 No matched method found for class org.apache.spark.sql.RelationalGroupedDataset.sum

这里有一些代码可以重现:

iris_tbl <- copy_to(sc, iris)
iris_tbl %>% sdf_pivot(Species ~ Sepal_Width) # this works
iris_tbl %>% sdf_pivot(Species ~ Sepal_Width, "sum") # this doesn't 

【问题讨论】:

    标签: r apache-spark sparklyr


    【解决方案1】:

    我相信这仍然是未记录的,但您收到此错误的原因是您需要将 sdf_pivot 函数与 R 列表用于聚合的 R 函数

    这里有一些例子:

    使用 R 列表:

    > iris_tbl %>% sdf_pivot(Species ~ Sepal_Width, list(Sepal_Width="sum")) %>% head()
    # Source:   lazy query [?? x 24]
    # Database: spark_connection
         Species `2.0` `2.2` `2.3` `2.4` `2.5` `2.6` `2.7` `2.8` `2.9` `3.0` `3.1` `3.2` `3.3`
           <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
    1 versicolor     2   4.4   6.9   7.2    10   7.8  13.5  16.8  20.3    24   9.3   9.6   3.3
    2  virginica   NaN   2.2   NaN   NaN    10   5.2  10.8  22.4   5.8    36  12.4  16.0   9.9
    3     setosa   NaN   NaN   2.3   NaN   NaN   NaN   NaN   NaN   2.9    18  12.4  16.0   6.6
    # ... with 10 more variables: `3.4` <dbl>, `3.5` <dbl>, `3.6` <dbl>, `3.7` <dbl>,
    #   `3.8` <dbl>, `3.9` <dbl>, `4.0` <dbl>, `4.1` <dbl>, `4.2` <dbl>, `4.4` <dbl>
    

    使用 R 函数:

    > sum_sepal_width <- function(gdf) {
      expr <- invoke_static(
              sc,
              "org.apache.spark.sql.functions",
              "expr",
              "sum(Sepal_Width)"
          )
    
       gdf %>% invoke("agg", expr, list())
    }
    
    > iris_tbl %>% sdf_pivot(Species ~ Sepal_Width, fun.aggregate = fun.aggregate)
    # Source:   table<sparklyr_tmp_4ee61c86311c> [?? x 24]
    # Database: spark_connection
         Species `2.0` `2.2` `2.3` `2.4` `2.5` `2.6` `2.7` `2.8` `2.9` `3.0` `3.1` `3.2` `3.3`
           <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
    1 versicolor     2   4.4   6.9   7.2    10   7.8  13.5  16.8  20.3    24   9.3   9.6   3.3
    2  virginica   NaN   2.2   NaN   NaN    10   5.2  10.8  22.4   5.8    36  12.4  16.0   9.9
    3     setosa   NaN   NaN   2.3   NaN   NaN   NaN   NaN   NaN   2.9    18  12.4  16.0   6.6
    # ... with 10 more variables: `3.4` <dbl>, `3.5` <dbl>, `3.6` <dbl>, `3.7` <dbl>,
    #   `3.8` <dbl>, `3.9` <dbl>, `4.0` <dbl>, `4.1` <dbl>, `4.2` <dbl>, `4.4` <dbl>
    

    注意:sdf_pivotsparklyr-0-6-0-unreleased 之前不可用。

    【讨论】:

    • 另请注意,您可以在聚合中使用其他变量。所以以下是完全有效的: iris_tbl %>% sdf_pivot(Species ~ Sepal_Width, list(Sepal_Length="sum")) %>% head()
    • 是否可以选择简单地按原样返回值? “身份”之类的东西?
    猜你喜欢
    • 2017-10-20
    • 1970-01-01
    • 2013-02-05
    • 2021-03-20
    • 2015-11-18
    • 2019-02-11
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多