我对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
我以前在scaladocs中已经看到了这一点。当我尝试像示例一样使用它们时,我收到并出错,
—
–the3rdNotch
not found: value avg
并且not found: value max
您进口什么?如果有一个示例并且您描述了问题所在,则可能会更容易获得帮助。
—
加博尔·巴科斯(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
以下测试可能有助于开始使用DataFrame函数。看来您也必须导入
—
GáborBakos 2015年
org.apache.spark.sql.functions._
。(顺便说一句:我认为最好将附加信息添加到问题本身,并足以在编辑后添加评论。)
.agg(avg(people("salary")), max(people("age")))
。通过排序,您可能可以找到(使用skip
和take
)百分位数,但是可能会有更快的选择。