Convertește funcția de fereastră din notație cu punct în SQL
Vom adăuga o coloană la un orar de tren, astfel încât fiecare rând să conțină numărul de minute până la următoarea oprire a trenului.
- Avem un DataFrame
dfundedf.columns == ['train_id', 'station', 'time']. dfeste înregistrat ca tabel SQL cu numeleschedule.- Interogarea cu funcție de fereastră de mai jos folosește notația cu punct și returnează un nou 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)
Observă utilizarea funcției unix_timestamp, care este echivalentă cu funcția SQL UNIX_TIMESTAMP.
Atenție la structura de tip schelet din codul exemplu. Formatarea răspunsului conform scheletului va preveni respingerea eronată a soluției din cauza unei probleme de formatare.
Acest exercițiu face parte din cursul
Introducere în Spark SQL în Python
Instrucțiuni pentru exercițiu
- Creează o interogare SQL care să producă un rezultat identic cu
dot_df. Formatează interogarea conform scheletului (adică înlocuiește spațiile marcate cu_____).
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
# 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()