Перетворіть віконну функцію з крапкової нотації на 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()