Sou muito novo no Scala e no Spark e estou trabalhando em alguns exercícios criados usando estatísticas de beisebol. Estou usando uma classe de caso, crie um RDD e atribua um esquema aos dados, e depois o transformei em um DataFrame para que eu possa usar o SparkSQL para selecionar grupos de jogadores por meio de suas estatísticas que atendam a certos critérios.
Depois de ter o subconjunto de jogadores que estou interessado em analisar mais adiante, gostaria de encontrar a média de uma coluna; por exemplo, Média de rebatidas ou RBIs. A partir daí, gostaria de dividir todos os jogadores em grupos de percentis com base no desempenho médio em comparação com todos os jogadores; os 10% superiores, 10% inferiores, 40-50%
Consegui usar a função DataFrame.describe () para retornar um resumo de uma coluna desejada (média, stddev, count, min e max), tudo como strings. Existe uma maneira melhor de obter apenas a média e o stddev como Pares, e qual é a melhor maneira de dividir os jogadores em grupos de 10%?
Até agora, meus pensamentos são encontrar os valores que marcam os intervalos percentuais e escrever uma função que agrupe os jogadores por meio de comparadores, mas parece que isso está prestes a reinventar a roda.
Atualmente, tenho as seguintes importações:
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.SQLContext
import org.apache.spark.{SparkConf, SparkContext}
import org.joda.time.format.DateTimeFormat
fonte
.agg(avg(people("salary")), max(people("age")))
. Com a classificação, você provavelmente pode encontrar (usandoskip
etake
) os percentis, mas pode haver opções mais rápidas.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._
. (BTW .: Eu acho que a informação adicional é melhor adicionado à própria questão e é suficiente para adicionar um comentário após edição.)Respostas:
Esta é a importação de que você precisa e como obter a média para uma coluna chamada "RBIs":
Para o desvio padrão, consulte scala - Calcular o desvio padrão de dados agrupados em um Spark DataFrame - Stack Overflow
Para agrupar por percentis, sugiro definir uma nova coluna por meio de uma função definida pelo usuário (UDF) e usar groupBy nessa coluna. Vejo
fonte
Isso também retorna a média da coluna
fonte