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  
War es hilfreich?

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|
+----------------+
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit datascience.stackexchange
scroll top