在sparklyr中,哪些聚合函数可以与sdf_pivot一起使用?

3

尝试在sparklyr的开发版本中使用sdf_pivot。看起来唯一有效的聚合函数是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 
1个回答

7

我相信这个仍然是未记录的,但你出现这个错误的原因是需要使用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>

注意:sparklyr-0.6.0未发布版本之前,sdf_pivot 不可用。


还要注意,您可以在聚合中使用其他变量。因此,以下内容是完全有效的: iris_tbl%>%sdf_pivot(Species〜Sepal_Width,list(Sepal_Length =“sum”))%>%head() - DivyaJyoti Rajdev
2
有没有一个选项可以简单地返回原值?类似于“identity”? - kputschko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接