Soy muy nuevo en Scala y Spark, y estoy trabajando en algunos ejercicios hechos por mí mismo usando estadísticas de béisbol. Estoy usando una clase de caso para crear un RDD y asignar un esquema a los datos, y luego lo estoy convirtiendo en un DataFrame para poder usar SparkSQL para seleccionar grupos de jugadores a través de sus estadísticas que cumplan con ciertos criterios.
Una vez que tenga el subconjunto de jugadores que me interesa buscar más, me gustaría encontrar la media de una columna; por ejemplo, promedio de bateo o carreras impulsadas. A partir de ahí, me gustaría dividir a todos los jugadores en grupos de percentiles en función de su rendimiento promedio en comparación con todos los jugadores; el 10% superior, el 10% inferior, 40-50%
Sin embargo, he podido usar la función DataFrame.describe () para devolver un resumen de una columna deseada (mean, stddev, count, min y max) como cadenas. ¿Hay una mejor manera de obtener solo la media y el estándar como Dobles, y cuál es la mejor manera de dividir a los jugadores en grupos de 10 percentiles?
Hasta ahora, mis pensamientos son encontrar los valores que refuerzan los rangos de percentiles y escribir una función que agrupe a los jugadores a través de comparadores, pero que parece que está bordeando la reinvención de la rueda.
Actualmente tengo las siguientes importaciones:
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.SQLContext
import org.apache.spark.{SparkConf, SparkContext}
import org.joda.time.format.DateTimeFormat
fuente
.agg(avg(people("salary")), max(people("age")))
. Con la clasificación, probablemente pueda encontrar (usandoskip
ytake
) los percentiles, pero puede haber opciones más rápidas.not found: value avg
ynot 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._
. (Por cierto: creo que la información adicional se agrega mejor a la pregunta en sí y es suficiente para agregar un comentario después de la edición.)Respuestas:
Esta es la importación que necesita y cómo obtener la media de una columna llamada "RBI":
Para la desviación estándar, vea scala - Calcular la desviación estándar de datos agrupados en un Spark DataFrame - Desbordamiento de pila
Para agrupar por percentiles, sugiero definir una nueva columna a través de una función definida por el usuario (UDF) y usar groupBy en esa columna. Ver
fuente
Esto también devuelve el promedio de la columna
fuente