Sono molto nuovo di Scala e Spark e sto lavorando ad alcuni esercizi fatti da sé usando le statistiche del baseball. Sto usando una classe di casi per creare un RDD e assegnare uno schema ai dati, quindi lo sto trasformando in un DataFrame in modo da poter usare SparkSQL per selezionare gruppi di giocatori attraverso le loro statistiche che soddisfano determinati criteri.
Una volta che ho il sottogruppo di giocatori che sono interessato a guardare oltre, vorrei trovare la media di una colonna; ad es. media battuta o RBI. Da lì vorrei suddividere tutti i giocatori in gruppi percentili in base alla loro performance media rispetto a tutti i giocatori; il 10% superiore, il 10% inferiore, il 40-50%
Sono stato in grado di utilizzare la funzione DataFrame.describe () per restituire un riepilogo di una colonna desiderata (media, stddev, count, min e max) tutti come stringhe. C'è un modo migliore per ottenere solo la media e lo stddev come Doppio, e qual è il modo migliore di suddividere i giocatori in gruppi di 10 percentili?
Finora il mio pensiero è quello di trovare i valori che regolano gli intervalli percentili e scrivere una funzione che raggruppa i giocatori tramite i comparatori, ma sembra che stia confinando con il reinventare la ruota.
Attualmente ho le seguenti importazioni:
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
enot 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._
. (A proposito: penso che le informazioni aggiuntive siano meglio aggiunte alla domanda stessa ed è sufficiente aggiungere un commento dopo la modifica.)
.agg(avg(people("salary")), max(people("age")))
. Con l'ordinamento probabilmente puoi trovare (usandoskip
etake
) i percentili, ma potrebbero esserci opzioni più veloci.