So berechnen Sie den Mittelwert einer Datenrahmenspalte und finden Sie die Top 10%
-
16-10-2019 - |
Frage
Ich bin sehr neu in Scala und Spark und arbeite an einigen selbst gemachten Übungen mit Baseballstatistiken. Ich verwende eine Fallklasse erstellen Sie eine RDD und weise den Daten ein Schema zu und verwandle sie dann in einen Datenrahmen, damit ich SparksQL verwenden kann, um Gruppen von Spielern über ihre Statistiken auszuwählen, die bestimmte Kriterien erfüllen.
Sobald ich die Untergruppe von Spielern habe, die ich weiter betrachten möchte, möchte ich den Mittelwert einer Kolumne finden. zB Schlagdurchschnitt oder RBIs. Von dort möchte ich alle Spieler in Perzentilgruppen brechen, basierend auf ihrer durchschnittlichen Leistung im Vergleich zu allen Spielern. die oberen 10%, unter 10%, 40-50%
Ich konnte die Funktion von DataFrame.Describe () verwenden, um eine Zusammenfassung einer gewünschten Spalte (Mittelwert, Stddev, Graf, Min und Max) zurückzugeben. Gibt es einen besseren Weg, um nur das gemeine und stddev als doppelt zu bekommen, und was ist der beste Weg, um die Spieler in Gruppen von 10 Prozent zu zerlegen?
Bisher ist es meine Gedanken, die Werte zu finden, die die Perzentilbereiche buchen und eine Funktion schreiben, die Spieler über Vergleicher gruppiert, aber das fühlt sich an, als würde sie das Rad neu erfinden.
Ich habe derzeit die folgenden 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
Lösung
Dies ist der Import, den Sie benötigen, und wie Sie den Mittelwert für eine Spalte mit dem Namen "RBIS" erhalten:
import org.apache.spark.sql.functions._
df.select(avg($"RBIs")).show()
Für die Standardabweichung sieheSCALA - Berechnen Sie die Standardabweichung gruppierter Daten in einem Spark DataFrame - Stapelüberlauf
Für die Gruppierung nach Perzentilen schlage ich vor, eine neue Spalte über eine benutzerdefinierte Funktion (UDF) zu definieren und GroupBy in dieser Spalte zu verwenden. Sehen
Andere Tipps
Dies ist auch der Durchschnitt der Spalte Renditen
df.select(mean(df("ColumnName"))).show() +----------------+ | avg(ColumnName)| +----------------+ |230.522453845909| +----------------+