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
dfdovedf.columns == ['train_id', 'station', 'time']. dfè registrato come tabella SQL chiamataschedule.- 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
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()