НачатьНачать бесплатно

Преобразование оконной функции из точечной нотации в 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()
Редактировать и запускать код