Я очень новичок в Scala и Spark и работаю над некоторыми самостоятельными упражнениями, используя бейсбольную статистику. Я использую класс наблюдений, создаю RDD и назначаю схему данным, а затем превращаю ее в DataFrame, чтобы я мог использовать SparkSQL для выбора групп игроков по их статистике, которая соответствует определенным критериям.
Как только у меня будет набор игроков, на которых мне интересно посмотреть дальше, я бы хотел найти среднее значение столбца; например, средний уровень или ИКР. Оттуда я хотел бы разбить всех игроков на процентильные группы на основе их средней производительности по сравнению со всеми игроками; верхние 10%, нижние 10%, 40-50%
Я был в состоянии использовать функцию DataFrame.describe (), чтобы вернуть сводку желаемого столбца (mean, stddev, count, min и max), все в виде строк. Есть ли лучший способ получить только среднее и стандартное значение в качестве двойников, и как лучше разбить игроков на группы по 10 процентилей?
Пока что я думаю о том, чтобы найти значения, которые переполняют диапазоны процентилей, и написать функцию, которая группирует игроков с помощью компараторов, но кажется, что она граничит с повторным изобретением колеса.
У меня есть следующий импорт в настоящее время:
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
иnot 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._
тоже. (Кстати: я думаю, что дополнительная информация лучше добавляется к самому вопросу, и достаточно добавить комментарий после редактирования.)
.agg(avg(people("salary")), max(people("age")))
. С помощью сортировки вы, вероятно, можете найти (используяskip
иtake
) процентили, но возможны более быстрые варианты.