LoslegenKostenlos starten

Window-Funktion von Dot-Notation zu SQL umwandeln

Wir fügen einem Zugfahrplan eine Spalte hinzu, sodass jede Zeile die Anzahl der Minuten enthält, die der Zug bis zum nächsten Halt benötigt.

  • Wir haben ein DataFrame df, wobei df.columns == ['train_id', 'station', 'time'].
  • df ist als SQL-Tabelle mit dem Namen schedule registriert.
  • Die folgende Window-Funktion verwendet die Dot-Notation. Sie liefert ein neues 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)

Beachte die Verwendung der Funktion unix_timestamp, die der SQL-Funktion UNIX_TIMESTAMP entspricht.

Bitte beachte das Gerüst im Beispielcode. Wenn du die Antwort entsprechend dem Gerüst formatierst, wird verhindert, dass deine eingereichte Antwort fälschlicherweise aufgrund eines Formatierungsproblems abgelehnt wird.

Diese Übung ist Teil des Kurses

<Kurs>Einführung in Spark SQL mit Python</Kurs>
Kurs ansehen

Übungsanweisungen

  • Erstelle eine SQL-Abfrage, die das identische Ergebnis wie dot_df liefert. Bitte formatiere die Abfrage gemäß dem Gerüst (d. h. die Platzhalter-Unterstriche _____).

Interaktive praktische Übung

Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.

# 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()
Code bearbeiten und ausführen