Виклик: Ваше Перше Завдання з Очищення Даних
Свайпніть щоб показати меню
Типовий конвеєр обробки даних зазвичай дотримується такої послідовності: Завантаження, Очищення, Трансформація та Збереження. У цьому мініпроєкті ці кроки застосовуються до конкретного набору даних, щоб перейти від сирих даних до чистого, агрегованого підсумку, готового для бізнес-звітності.
Щоб завершити Розділ 4, пропонується застосувати всі отримані знання на практиці. Хоча ці кроки можна застосувати до будь-якого обраного набору даних, рішення буде продемонстровано на популярному наборі Diamonds. Цей набір містить ціни та характеристики (огранювання, колір, чистота тощо) майже 54 000 діамантів.
Можна переглянути відео та виконати завдання самостійно, використовуючи той самий набір даних (широко доступний на Kaggle як diamonds.csv), або обрати будь-який інший набір даних і застосувати той самий принцип, визначивши подібну мету.
Будь ласка, за можливості призупиніть відео або читання тексту після ознайомлення з метою. Спробуйте виконати проєкт самостійно, незалежно від рівня впевненості у своїх знаннях Databricks. Навіть проста спроба буде значно кориснішою, ніж просто ознайомлення з рішенням. Якщо у вас обмаль часу, продовжуйте читати рішення та спробуйте виконати це завдання вдома пізніше як вправу.
Мета
Ваша ціль — визначити середню ціну та середню вагу в каратах для діамантів огранювання "Premium", згрупованих за кольором, і зберегти лише результати з високою вартістю (де середня ціна перевищує $4,000) у нову таблицю.
Крок 1: Завантаження та перевірка
Спочатку завантажте дані та перевірте схему, щоб переконатися, що ціни та карати розпізнаються як числові значення.
# Assuming the diamonds CSV was uploaded to a Volume
df = spark.read.format("csv").option("header", "true").option("inferSchema", "true").load("/Volumes/main/default/my_volume/diamonds.csv")
df.printSchema()
Крок 2: Фільтрація та вибір
Не всі стовпці потрібні, і для цього завдання цікавлять лише діаманти з огранюванням "Premium":
# Filter for Premium cut and select relevant columns
premium_df = df.filter(df.cut == "Premium").select("color", "price", "carat")
Крок 3: Агрегація та групування
Тепер можна обчислити середні значення. Використовуйте бібліотеку pyspark.sql.functions, щоб забезпечити коректність обчислень.
from pyspark.sql import functions as F
# Group by color and calculate averages
summary_df = premium_df.groupBy("color").agg(
F.avg("price").alias("avg_price"),
F.avg("carat").alias("avg_carat")
)
.alias() просто перейменовує стовпець у результаті запиту — це як тимчасове прізвисько. Це не змінює саму таблицю, лише те, як стовпець відображається у виведених даних.
Уявіть це як AS у SQL — SELECT price AS price_in_usd.
Корисно, коли назви стовпців довгі, незрозумілі або коли ви створюєте обчислюваний стовпець і потрібно надати йому зрозумілу назву.
Крок 4: Фінальна фільтрація та сортування
Потрібно залишити лише ті категорії з високою вартістю, де середня ціна перевищує 4 000. Результати також будуть відсортовані так, щоб найдорожча середня ціна була зверху.
final_df = summary_df.filter(F.col("avg_price") > 4000).orderBy("avg_price", ascending=False)
display(final_df)
Можливо, ви ще не стикалися з функцією F.col().
F.col() — це спосіб звернення до стовпця за назвою у PySpark. F — це просто псевдонім для pyspark.sql.functions, який імпортується на початку вашого ноутбука так:
from pyspark.sql import functions as F
df.select(F.col("price"))
У багатьох випадках це еквівалентно простому використанню назви стовпця як рядка, але F.col() є кращим, оскільки дозволяє напряму виконувати операції над цим об'єктом:
F.col("price") * 1.1
F.col("cut").alias("diamond_cut")
Вважайте, що F.col("price") означає "надати стовпець price як об'єкт, з яким можна виконувати різні дії."
Крок 5: Збереження результату
Нарешті, зафіксуйте цей очищений звіт "High-Value Premium Diamonds" у нашому Каталозі, щоб аналітична команда могла ним скористатися.
final_df.write.mode("overwrite").saveAsTable("main.default.high_value_premium_diamonds")
1. Чому на кроці 3 ви використали метод .alias() під час агрегації?
2. Якщо ви хочете застосувати цей проєкт до власного набору даних, яку частину коду потрібно змінити першою?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат