Jestem bardzo nowy w Scali i Sparkie i pracuję nad własnymi ćwiczeniami z wykorzystaniem statystyk baseballu. Korzystam z klasy przypadków, aby utworzyć RDD i przypisać schemat do danych, a następnie przekształcam go w DataFrame, dzięki czemu mogę używać SparkSQL do wybierania grup graczy poprzez ich statystyki, które spełniają określone kryteria.
Gdy mam już podzbiór graczy, którym jestem zainteresowany, chciałbym znaleźć środek kolumny; np. średnia mrugnięcia lub RBI. Stamtąd chciałbym podzielić wszystkich graczy na grupy percentylowe na podstawie ich średniej wydajności w porównaniu do wszystkich graczy; górne 10%, dolne 10%, 40-50%
Byłem w stanie użyć funkcji DataFrame.describe (), aby zwrócić podsumowanie pożądanej kolumny (średnia, stddev, count, min i max) wszystkie jako ciągi. Czy jest lepszy sposób, aby uzyskać tylko średnią i standardową wartość jako Doubles, i jaki jest najlepszy sposób na podzielenie graczy na grupy 10-percentylowe?
Do tej pory myślę o tym, by znaleźć wartości, które wyznaczają zakresy percentyla i napisać funkcję grupującą graczy za pomocą komparatorów, ale wydaje mi się, że graniczy z ponownym odkrywaniem koła.
Obecnie mam następujący import:
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
inot 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._
. (BTW .: Myślę, że dodatkowe informacje lepiej dodać do samego pytania i wystarczy dodać komentarz po edycji.)
.agg(avg(people("salary")), max(people("age")))
. Podczas sortowania prawdopodobnie możesz znaleźć (używającskip
itake
) percentyle, ale mogą być szybsze opcje.