Выборка II
Как и в SQL, метод .select() позволяет выполнять операции над столбцами. При выборке столбца с помощью нотации df.colName можно применять любые операции — и .select() вернёт преобразованный столбец. Например,
flights.select(flights.air_time/60)
возвращает столбец с продолжительностью полётов в часах вместо минут. Метод .alias() позволяет переименовать выбираемый столбец. Так, чтобы получить столбец duration_hrs (которого нет в DataFrame) с помощью .select(), можно написать:
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 уже доступен в вашем рабочем пространстве, как и DataFrame 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 ____")