Zet een windowfunctie om van dotnotatie naar SQL
We gaan een kolom toevoegen aan een treintijdschema zodat elke rij het aantal minuten bevat dat de trein nodig heeft om zijn volgende stop te bereiken.
- We hebben een dataframe
dfwaardf.columns == ['train_id', 'station', 'time']. dfis geregistreerd als een SQL-tabel met de naamschedule.- De volgende windowfunctiequery gebruikt dotnotatie. Deze geeft een nieuw dataframe
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)
Let op het gebruik van de functie unix_timestamp, die gelijkwaardig is aan de SQL-functie UNIX_TIMESTAMP.
Houd rekening met de scaffolding in de voorbeeldcode. Als je je antwoord volgens de scaffolding formatteert, voorkom je dat je inzending onterecht wordt afgekeurd door een opmaakfout.
Deze oefening maakt deel uit van de cursus
Introductie tot Spark SQL in Python
Oefeninstructies
- Maak een SQL-query die een identiek resultaat oplevert als
dot_df. Formatteer de query volgens de scaffolding (dus met de placeholder-underscores_____).
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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()