Začněte nyníZačněte zdarma

Převod okenní funkce z tečkové notace do SQL

Do jízdního řádu vlaku přidáme sloupec, který bude v každém řádku obsahovat počet minut, za který vlak dorazí na další zastávku.

  • Máš k dispozici dataframe df, kde df.columns == ['train_id', 'station', 'time'].
  • df je zaregistrován jako SQL tabulka s názvem schedule.
  • Následující dotaz s okenní funkcí používá tečkovou notaci a vrací nový 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)

Všimni si použití funkce unix_timestamp, která odpovídá SQL funkci UNIX_TIMESTAMP.

Dbej na strukturu (scaffolding) v ukázkovém kódu. Pokud odpověď naformátuješ podle ní, předejdeš chybám při vyhodnocení způsobeným formátováním.

Toto cvičení je součástí kurzu

Úvod do Spark SQL v Pythonu

Zobrazit kurz

Pokyny k cvičení

  • Vytvoř SQL dotaz, který vrátí stejný výsledek jako dot_df. Dotaz naformátuj podle zadané struktury (tj. doplň chybějící části místo zástupných podtržítek _____).

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

# 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()
Upravit a spustit kód