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


13

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

一旦我有一部分球员有兴趣进一步研究,我想找到一栏的平均值。例如,击球平均值或打点。从那以后,我想根据所有球员的平均表现将他们分成几个百分点。最高10%,最低10%,40-50%

我已经能够使用DataFrame.describe()函数以字符串形式返回所需列的摘要(均值,stddev,count,min和max)。有没有更好的方法来获得均值和标准差作为双打,将球员分成10个百分点的最佳方法是什么?

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

我目前有以下进口:

 import org.apache.spark.rdd.RDD 
 import org.apache.spark.sql.SQLContext 
 import org.apache.spark.{SparkConf, SparkContext} 
 import org.joda.time.format.DateTimeFormat  

您检查了scaladoc吗?它有一个平均值和最大值的示例.agg(avg(people("salary")), max(people("age")))。通过排序,您可能可以找到(使用skiptake)百分位数,但是可能会有更快的选择。
加博尔·巴科斯(GáborBakos)2015年

我以前在scaladocs中已经看到了这一点。当我尝试像示例一样使用它们时,我收到并出错,not found: value avg并且not found: value max
–the3rdNotch

您进口什么?如果有一个示例并且您描述了问题所在,则可能会更容易获得帮助。
加博尔·巴科斯(GáborBakos)2015年

import org.apache.spark.rdd.RDD import org.apache.spark.sql.SQLContext import org.apache.spark.{SparkConf, SparkContext} import org.joda.time.format.DateTimeFormat
the3rdNotch

以下测试可能有助于开始使用DataFrame函数。看来您也必须导入org.apache.spark.sql.functions._。(顺便说一句:我认为最好将附加信息添加到问题本身,并足以在编辑后添加评论。)
GáborBakos 2015年

Answers:



4

这也是列的平均值

df.select(mean(df(“ ColumnName”)))。show()
+ ---------------- +
| avg(ColumnName)|
+ ---------------- +
| 230.522453845909 |
+ ---------------- +
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.