Ich bin sehr neu in Scala und Spark und arbeite an einigen selbst gemachten Übungen, die Baseballstatistiken verwenden. Ich verwende eine Fallklasse, erstelle eine RDD und ordne den Daten ein Schema zu. Anschließend verwandle ich sie in einen DataFrame, damit ich mithilfe von SparkSQL Gruppen von Spielern anhand ihrer Statistiken auswählen kann, die bestimmte Kriterien erfüllen.
Sobald ich eine Untergruppe von Spielern habe, die ich näher betrachten möchte, möchte ich den Mittelwert einer Spalte ermitteln. zB Batting Average oder RBIs. Von da an möchte ich alle Spieler auf der Grundlage ihrer durchschnittlichen Leistung im Vergleich zu allen Spielern in Perzentilgruppen aufteilen. die oberen 10%, unteren 10%, 40-50%
Ich konnte die DataFrame.describe () - Funktion verwenden, um eine Zusammenfassung einer gewünschten Spalte (Mittelwert, stddev, count, min und max) als Zeichenfolgen zurückzugeben. Gibt es einen besseren Weg, um nur den Mittelwert und den Standardwert als Doppel zu erhalten, und was ist der beste Weg, um die Spieler in Gruppen von 10-Perzentilen zu unterteilen?
Bisher denke ich daran, die Werte zu finden, die die Perzentilbereiche ausmachen, und eine Funktion zu schreiben, die die Spieler über Komparatoren gruppiert, die sich jedoch so anfühlt, als würde sie das Rad neu erfinden.
Ich habe derzeit folgende Importe:
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.SQLContext
import org.apache.spark.{SparkConf, SparkContext}
import org.joda.time.format.DateTimeFormat
quelle
.agg(avg(people("salary")), max(people("age")))
. Mit der Sortierung können Sie wahrscheinlich die Perzentile finden (mitskip
undtake
), aber es gibt möglicherweise schnellere Optionen.not found: value avg
undnot 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
org.apache.spark.sql.functions._
. (Übrigens: Ich denke, die zusätzlichen Informationen werden besser zu der Frage selbst hinzugefügt und es reicht aus, nach der Bearbeitung einen Kommentar hinzuzufügen.)Antworten:
Dies ist der Import, den Sie benötigen, und wie Sie den Mittelwert für eine Spalte mit dem Namen "RBIs" ermitteln:
Informationen zur Standardabweichung finden Sie unter scala - Berechnen der Standardabweichung gruppierter Daten in einem Spark-DataFrame - Stapelüberlauf
Für die Gruppierung nach Perzentilen empfehle ich, eine neue Spalte über eine benutzerdefinierte Funktion (UDF) zu definieren und groupBy für diese Spalte zu verwenden. Sehen
quelle
Dies gibt auch den Durchschnitt der Spalte zurück
quelle