ComenzarEmpieza gratis

Convierte la función window de notación de puntos a SQL

Vamos a añadir una columna a un horario de trenes para que cada fila contenga el número de minutos que tarda el tren en llegar a su próxima parada.

  • Tenemos un dataframe df donde df.columns == ['train_id', 'station', 'time'].
  • df está registrado como una tabla SQL llamada schedule.
  • La siguiente consulta con función window usa notación de puntos. Devuelve un nuevo 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)

Fíjate en el uso de la función unix_timestamp, que es equivalente a la función SQL UNIX_TIMESTAMP.

Ten en cuenta el andamiaje en el código de ejemplo. Formatear la respuesta según el andamiaje garantizará que tu respuesta enviada no sea rechazada por error debido a un problema de formato.

Este ejercicio forma parte del curso

Introducción a Spark SQL en Python

Ver curso

Instrucciones del ejercicio

  • Crea una consulta SQL para obtener un resultado idéntico a dot_df. Por favor, formatea la consulta según el andamiaje (es decir, las líneas de subrayado _____).

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

# 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()
Editar y ejecutar código