Kom igångKom igång gratis

Konvertera en fönsterfunktion från dot notation till SQL

Vi ska lägga till en kolumn i ett tågschema så att varje rad innehåller antalet minuter tills tåget når nästa hållplats.

  • Vi har en DataFrame df där df.columns == ['train_id', 'station', 'time'].
  • df är registrerad som en SQL-tabell med namnet schedule.
  • Följande fönsterfunktionsfråga använder dot notation och returnerar en ny 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)

Observera användningen av funktionen unix_timestamp, som motsvarar SQL-funktionen UNIX_TIMESTAMP.

Tänk på ställningskoden i exempelkoden. Om du formaterar svaret enligt ställningskoden undviker du att ett korrekt svar felaktigt avvisas på grund av ett formateringsproblem.

Den här övningen är en del av kursen

Introduktion till Spark SQL i Python

Visa kurs

Övningsinstruktioner

  • Skriv en SQL-fråga som ger ett identiskt resultat som dot_df. Formatera frågan enligt ställningskoden (dvs. platshållarunderstreck _____).

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

# 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()
Redigera och kör kod