Як обчислити середнє значення стовпця фрейму даних і знайти топ-10%


13

Я дуже новачок у Scala та Spark і працюю над деякими саморобними вправами, використовуючи статистику бейсболу. Я використовую класовий регістр, щоб створити RDD і призначити схему даним, а потім перетворюю їх у DataFrame, щоб я міг використовувати SparkSQL для вибору груп гравців за їх статистикою, що відповідають певним критеріям.

Після того, як у мене є підмножина гравців, які мені цікаво подивитися далі, я хотів би знайти середнє колонку; наприклад, середній показник ватин або RBI. Звідти я хотів би розбити всіх гравців на процентні групи, виходячи з їх середньої продуктивності порівняно з усіма гравцями; верхній 10%, нижній 10%, 40-50%

Мені вдалося використовувати функцію DataFrame.describe (), щоб повернути підсумок потрібного стовпця (середнє значення, stddev, кількість, хв і макс), все як рядки. Чи є кращий спосіб отримати просто середні і stddev як парні, і який найкращий спосіб розбити гравців на групи по 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  

Ви перевірили скаладока ? Це є приклад для середнього і макс: .agg(avg(people("salary")), max(people("age"))). За допомогою сортування ви, ймовірно, можете знайти (використовуючи skipта take) відсотки, але можливі швидші варіанти.
Габор Бакос

Я раніше це бачив у scaladocs. Коли я намагаюся використовувати їх як приклад , я отримую і помилки not found: value avgіnot found: value max
the3rdNotch

Який ваш імпорт? Можливо, буде легше допомогти, якщо є приклад, і ви опишите, у чому була проблема.
Габор Бакос

import org.apache.spark.rdd.RDD import org.apache.spark.sql.SQLContext import org.apache.spark.{SparkConf, SparkContext} import org.joda.time.format.DateTimeFormat
the3rdNotch

Наступний тест може допомогти почати використовувати функції DataFrame. Здається, вам теж потрібно імпортувати org.apache.spark.sql.functions._. (BTW.) Я думаю, що додаткову інформацію краще додати до самого запитання, і досить додати коментар після редагування.)
Gábor Bakos

Відповіді:


21

Це імпорт, який вам потрібен, і як отримати середнє значення для стовпця з назвою "RBI":

import org.apache.spark.sql.functions._
df.select(avg($"RBIs")).show()

Для стандартного відхилення див. Шкалу - Обчислити стандартне відхилення згрупованих даних у Spark DataFrame - Переповнення стека

Для групування за відсотками пропоную визначити новий стовпець за допомогою визначеної користувачем функції (UDF) та використовувати groupBy у цьому стовпці. Побачити


4

Це також повертає середнє значення стовпця

df.select (середнє (df ("Ім'я стовпця"))). show ()
+ ---------------- +
| avg (назва стовпця) |
+ ---------------- +
| 230.522453845909 |
+ ---------------- +
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.