IniziaInizia gratis

Converti una funzione window dalla dot notation a SQL

Aggiungiamo una colonna a un orario dei treni in modo che ogni riga contenga il numero di minuti necessari al treno per raggiungere la fermata successiva.

  • Abbiamo un dataframe df dove df.columns == ['train_id', 'station', 'time'].
  • df è registrato come tabella SQL chiamata schedule.
  • La seguente query con funzione window usa la dot notation. Restituisce un nuovo 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)

Nota l'uso della funzione unix_timestamp, equivalente alla funzione SQL UNIX_TIMESTAMP.

Fai attenzione all'impalcatura nel codice di esempio. Formattare la risposta seguendo l'impalcatura garantirà che la tua risposta inviata non venga erroneamente rifiutata per un problema di formattazione.

Questo esercizio fa parte del corso

Introduzione a Spark SQL in Python

Visualizza il corso

Istruzioni dell'esercizio

  • Crea una query SQL per ottenere un risultato identico a dot_df. Per favore, formatta la query seguendo l'impalcatura (cioè i trattini bassi segnaposto _____).

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

# 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()
Modifica ed esegui il codice