LoslegenKostenlos loslegen

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

Einführung in Spark SQL mit Python

Kurs anzeigen

Anleitung zur Übung

  • 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 Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

# 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