使用 SparkR 分组百分位数

Posted

技术标签:

【中文标题】使用 SparkR 分组百分位数【英文标题】:Grouped percentile using SparkR 【发布时间】:2018-08-28 02:12:40 【问题描述】:

我想使用 SparkR 计算分组百分位数。我试过这个

library(SparkR)
mtcars_spark %>% 
      SparkR::groupBy("cyl") %>%
      SparkR::summarize(p75 = approxQuantile("mpg", 0.75, 0.01),
                        p90 = approxQuantile("mpg", 0.90, 0.01),
                        p99 = approxQuantile("mpg", 0.99, 0.01))

...但是,得到了这个错误:

unable to find an inherited method for function ‘approxQuantile’ for signature ‘"GroupedData", "character", "numeric", "numeric"’

如何使用 SparkR 获得分组百分位数,以便所需的输出与以下代码中的相同:

library(dplyr)
mtcars %>% 
  group_by(cyl) %>% 
  summarise(p75 = quantile(mpg, 0.75),
            p90 = quantile(mpg, 0.90),
            p99 = quantile(mpg, 0.99))

【问题讨论】:

【参考方案1】:

approxQuantile 是一种在 Datasets 上运行的方法 - 它没有在 *GroupedDataset 上运行的变体。如果您启用了 Hive 支持,则使用 Hive 的 percentile UDF:

mtcars_spark %>% 
    SparkR::groupBy("cyl") %>%
    SparkR::summarize(p75 = expr("percentile(mpg, 0.75)"),
                      p90 = expr("percentile(mpg, 0.90)"),
                      p99 = expr("percentile(mpg, 0.99)"))

如果没有,您可以尝试gapply 函数,但它的效率可能要低得多。

【讨论】:

是否需要加载任何库才能使用 Hive 的百分位数功能? 哇...这工作!谢谢!!我可以在哪里阅读更多相关信息? Hive Language Manual - UDF section。也可以查看***.com/q/52049152/6910411和***.com/q/34519549/6910411

以上是关于使用 SparkR 分组百分位数的主要内容,如果未能解决你的问题,请参考以下文章

百分位数分组表[重复]

Pandas .. 分位数函数是不是需要排序数据来计算百分位数?

JavaScript中的分位数/百分点/百分位数/逆累积分布函数

按百分位数将类似 sql 的查询的结果分组:在 Redshift / postgresql

如何在 JavaScript(或 PHP)中获取数组的中位数和四分位数/百分位数?

在 SQL 中分析并形成分位数并计算落在各个分位数中的值的百分比