Агрегація та Групування в Python
Свайпніть щоб показати меню
Агрегація — це процес підсумовування кількох рядків даних у одне значуще значення, наприклад, суму, середнє або кількість. Групування дозволяє застосовувати ці підсумки до певних категорій, наприклад, знаходити загальний обсяг продажів для кожного окремого регіону.
Рідко виникає потреба переглядати мільйони окремих рядків сирих даних. Зазвичай цікавить "загальна картина" — підсумки, середні значення або кількість по категоріях. У Spark цього можна досягти, поєднуючи два потужних методи: groupBy() та agg().
Базовий шаблон groupBy
Щоб підсумувати дані за певною категорією, спочатку використовується метод groupBy(). Це вказує Spark згрупувати всі рядки з однаковим значенням (наприклад, "cut" у таблиці diamonds) в одну групу. Проте саме по собі групування нічого не робить; необхідно додати агрегацію.
# Group by cut and count how many rows are in each
count_df = df.groupBy("cut").count()
display(count_df)
Виконання математичних операцій за допомогою sum(), avg() та max()
Після групування даних можна застосовувати математичні функції до числових стовпців. Щоб переглянути загальний прибуток за типом товару, використовуйте .sum().
# Total total_depth per cut category
total_depth = df.groupBy("cut").sum("x")
display(total_depth)
Зверніть увагу, що Spark автоматично перейменовує стовпець на sum(x). У наступному розділі ми дізнаємося, як зробити ці назви більш професійними.
Метод agg() для кількох метрик
Якщо потрібно обчислити декілька показників одночасно — наприклад, середній прибуток і максимальний дохід для кожного регіону — використовується метод .agg() (aggregate). Це професійний стандарт для створення складних підсумкових таблиць.
from pyspark.sql import functions as F
# Calculate multiple metrics at once
summary_df = df.groupBy("cut").agg(
F.sum("x"),
F.avg("y"),
F.max("z")
)
display(summary_df)
Ми імпортуємо pyspark.sql.functions as F, щоб отримати доступ до цих потужних математичних інструментів.
Групування за декількома стовпцями
Групування не обмежується лише однією категорією. Можна передати список стовпців, щоб переглянути дані на більш детальному рівні, наприклад, загальне значення x для кожного Color Type у межах кожного Cut.
multi_group_df = df.groupBy("cut", "color").sum("x")
display(multi_group_df)
Сортування результатів
Агреговані дані часто легше читати у відсортованому вигляді. Ви можете додати метод .orderBy() наприкінці вашої агрегації, щоб бачити категорії з найкращими показниками на початку списку.
# Show highest profit categories first
sorted_df = summary_df.orderBy("sum(x)", ascending=False)
display(sorted_df)
1. Який метод потрібно викликати ПЕРЕД застосуванням sum() або avg(), якщо ви хочете отримати результати з розбивкою за категоріями?
2. Яка перевага використання методу .agg() замість лише .sum()?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат