【问题标题】:How to calculate the mean of a dataframe column and find the top 10%如何计算数据框列的平均值并找到前 10%
【发布时间】:2015-10-12 10:11:44
【问题描述】:

我对 Scala 和 Spark 非常陌生,并且正在使用棒球统计数据进行一些自制练习。我正在使用案例类创建 RDD 并为数据分配架构,然后将其转换为 DataFrame,以便我可以使用 SparkSQL 通过符合特定条件的统计数据来选择玩家组。

一旦我有了有兴趣进一步研究的玩家子集,我想找到一个列的平均值;例如击球平均数或 RBI。从那里我想根据他们与所有玩家相比的平均表现将所有玩家分成百分位数;前 10%,后 10%,40-50%

我已经能够使用 DataFrame.describe() 函数将所需列的摘要(平均值、标准差、计数、最小值和最大值)全部作为字符串返回。有没有更好的方法来获得双打的平均值和标准差,以及将玩家分成 10 个百分位数的组的最佳方法是什么?

到目前为止,我的想法是找到结束百分位数范围的值,并编写一个通过比较器对玩家进行分组的函数,但这感觉就像是在重新发明轮子。

【问题讨论】:

  • 看起来数据框内置了一些百分位的东西:stackoverflow.com/a/30900466/21755 有什么用吗?
  • 我之前尝试过,但出现以下错误:Exception in thread "main" java.util.NoSuchElementException: key not found: PERCENTILE
  • Spark 版本问题?你用的是什么版本?
  • 我使用的是 1.4.0 版本

标签: scala apache-spark bigdata apache-spark-sql


【解决方案1】:

我能够通过使用 Windows 函数获得百分位数,并在窗口上应用 ntile() 和 cumeDist()。 ntile() 可以根据输入数字创建分组。如果您希望按 10% 分组,只需输入 ntile(10),如果按 5% 则输入 ntile(20)。为了获得更精细的结果,在窗口上应用 cumeDist() 将输出一个具有累积分布的新列,并且可以通过 select()、where() 或 SQL 查询从那里过滤。

【讨论】:

    猜你喜欢
    • 2016-08-03
    • 2017-12-20
    • 2017-09-24
    • 2016-03-03
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多