私はScalaとSparkを初めて使い、野球の統計を使用した自作のエクササイズに取り組んでいます。ケースクラスを使用してRDDを作成し、データにスキーマを割り当ててから、それをDataFrameに変換して、SparkSQLを使用して特定の条件を満たす統計情報を介してプレーヤーのグループを選択できるようにします。
さらに検討したいプレーヤーのサブセットができたら、列の平均を見つけたいと思います。例:バッティング平均またはRBI。そこから、すべてのプレーヤーと比較した平均パフォーマンスに基づいて、すべてのプレーヤーをパーセンタイルグループに分割します。上位10%、下位10%、40-50%
ただし、DataFrame.describe()関数を使用して、目的の列(mean、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
not found: value avg
とnot found: value max
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.SQLContext
import org.apache.spark.{SparkConf, SparkContext}
import org.joda.time.format.DateTimeFormat
.agg(avg(people("salary")), max(people("age")))
。ソートを使用するskip
と、おそらくを使用して(およびを使用してtake
)パーセンタイルを見つけることができますが、より高速なオプションがあるかもしれません。