Вибірка II
Подібно до SQL, ви також можете використовувати метод .select() для операцій над стовппцями. Якщо ви обираєте стовпець у нотації df.colName, можна виконувати будь-які операції над стовппцем, і метод .select() поверне перетворений стовпець. Наприклад,
flights.select(flights.air_time/60)
повертає стовпець із тривалістю польоту в годинах замість хвилин. Ви також можете застосувати метод .alias(), щоб перейменувати вибраний стовпець. Тож, якщо ви хочете .select() стовпець duration_hrs (якого немає у вашому DataFrame), можна зробити так:
flights.select((flights.air_time/60).alias("duration_hrs"))
Еквівалентний метод для Spark DataFrame — .selectExpr(), який приймає SQL-вирази як рядки:
flights.selectExpr("air_time/60 as duration_hrs")
тут ключове слово SQL as є еквівалентом методу .alias(). Щоб вибрати кілька стовппців, передайте кілька рядків.
Пам'ятайте, у вашому середовищі вже створено SparkSession з назвою spark, а також доступний датафрейм Spark flights.
Ця вправа є частиною курсу
Основи PySpark
Інструкції до вправи
Створіть таблицю середньої швидкості кожного рейсу двома способами.
- Обчисліть середню швидкість, поділивши
distanceнаair_time(переведений у години). Використайте метод.alias(), щоб назвати цей стовпець"avg_speed". Збережіть результат у зміннійavg_speed. - Виберіть стовпці
"origin", "dest", "tailnum"іavg_speed(без лапок!). Збережіть це якspeed1. - Створіть таку саму таблицю за допомогою
.selectExpr()і рядка з SQL-виразом. Збережіть це якspeed2.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
# Define avg_speed
avg_speed = (flights.____/(flights.____/60)).alias("____")
# Select the correct columns
speed1 = flights.select("origin", "dest", "tailnum", avg_speed)
# Create the same table using a SQL expression
speed2 = flights.selectExpr("____", "____", "____", "distance/(air_time/60) as ____")