Aan de slagGa gratis aan de slag

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 df waar df.columns == ['train_id', 'station', 'time'].
  • df is geregistreerd als een SQL-tabel met de naam schedule.
  • 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

Cursus bekijken

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()
Code bewerken en uitvoeren