Convertir une fonction window de la notation par points vers SQL
Nous allons ajouter une colonne à un horaire de train afin que chaque ligne contienne le nombre de minutes nécessaires au train pour atteindre son prochain arrêt.
- Nous avons un dataframe
dfoùdf.columns == ['train_id', 'station', 'time']. dfest enregistré comme table SQL nomméeschedule.- La fonction window suivante utilise la notation par points. Elle produit un nouveau 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)
Notez l’utilisation de la fonction unix_timestamp, équivalente à la fonction SQL UNIX_TIMESTAMP.
Merci de tenir compte de l’ossature fournie dans l’exemple de code. Respecter ce formatage garantira que votre réponse ne sera pas rejetée par erreur à cause d’un problème de format.
Cet exercice fait partie du cours
Introduction à Spark SQL en Python
Instructions
- Créez une requête SQL produisant un résultat identique à
dot_df. Veillez à respecter l’ossature fournie (c.-à-d. les traits de soulignement_____).
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# 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()