Przekształć funkcję okna z notacji z kropką na SQL
Dodamy kolumnę do rozkładu jazdy pociągów, tak aby każdy wiersz zawierał liczbę minut potrzebnych pociągowi do dotarcia do następnego przystanku.
- Masz do dyspozycji ramkę danych
df, gdziedf.columns == ['train_id', 'station', 'time']. dfjest zarejestrowana jako tabela SQL o nazwieschedule.- Poniższe zapytanie z funkcją okna używa notacji z kropką i zwraca nową ramkę danych
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)
Zwróć uwagę na użycie funkcji unix_timestamp, która odpowiada funkcji SQL UNIX_TIMESTAMP.
Pamiętaj o szablonie w przykładowym kodzie. Sformatowanie odpowiedzi zgodnie z szablonem zapobiegnie odrzuceniu jej z powodu błędu formatowania.
To ćwiczenie jest częścią kursu
Wprowadzenie do Spark SQL w Pythonie
Instrukcje do ćwiczenia
- Napisz zapytanie SQL, które da wynik identyczny jak
dot_df. Sformatuj zapytanie zgodnie z szablonem (tzn. zastąp odpowiednie miejsca zaznaczone podkreślnikami_____).
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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()