Преобразование оконной функции из точечной нотации в SQL
Мы добавим столбец к расписанию поездов, чтобы в каждой строке отображалось количество минут до следующей остановки.
- У нас есть датафрейм
df, гдеdf.columns == ['train_id', 'station', 'time']. dfзарегистрирован как SQL-таблица с именемschedule.- Следующий запрос с оконной функцией использует точечную нотацию и возвращает новый датафрейм
dot_df.
window = Window.partitionBy('train_id').orderBy('time')
dot_df = df.withColumn('diff_min',
(unix_timestamp(lead('time', 1).over(window),'H:m')
- unix_timestamp('time', 'H:m'))/60)
Обратите внимание на использование функции unix_timestamp, которая эквивалентна SQL-функции UNIX_TIMESTAMP.
Учтите структуру шаблона в примере кода. Форматирование ответа в соответствии с шаблоном гарантирует, что ваш ответ не будет отклонён из-за проблем с форматированием.
Это упражнение является частью курса
Введение в Spark SQL на Python
Инструкции к упражнению
- Создайте SQL-запрос, результат которого будет идентичен
dot_df. Отформатируйте запрос в соответствии с шаблоном (то есть заполните пропуски_____).
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# Create a SQL query to obtain an identical result to dot_df
query = """
SELECT *,
(____(____(time, 1) ____ (____ BY train_id ____ BY time),'H:m')
- ____(time, 'H:m'))/60 AS diff_min
FROM schedule
"""
sql_df = spark.sql(query)
sql_df.show()