如何计算数据框列的平均值并找到前10%

时间:2015-07-22 13:36:21

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

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

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

我已经能够使用DataFrame.describe()函数将所需列的摘要(mean,stddev,count,min和max)作为字符串返回。是否有更好的方法可以将平均值和stddev作为双打,以及将玩家分成10个百分点的最佳方法是什么?

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

1 个答案:

答案 0 :(得分:0)

我能够通过使用Windows函数获取百分位数并在窗口上应用ntile()和cumeDist()。 ntile()可以根据输入数创建分组。如果你想要分组10%的东西,只需输入ntile(10),如果是5%则输入ntile(20)。对于更精细的restult,在窗口上应用的cumeDist()将输出一个带有累积分布的新列,并且可以通过select(),where()或SQL查询从那里过滤。