ComeçarComece de graça

Converter função window da notação de ponto para SQL

Vamos adicionar uma coluna a um cronograma de trens para que cada linha contenha o número de minutos que o trem leva para chegar à próxima parada.

  • Temos um dataframe df onde df.columns == ['train_id', 'station', 'time'].
  • df está registrado como uma tabela SQL chamada schedule.
  • A seguinte consulta com função window usa notação de ponto. Ela gera um novo 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)

Observe o uso da função unix_timestamp, que é equivalente à função SQL UNIX_TIMESTAMP.

Fique atento ao esqueleto no código de exemplo. Formatar a resposta de acordo com o esqueleto garantirá que sua resposta enviada não seja rejeitada por engano devido a um problema de formatação.

Este exercício faz parte do curso

Introdução ao Spark SQL em Python

Ver curso

Instruções do exercício

  • Crie uma consulta SQL para obter um resultado idêntico ao de dot_df. Formate a consulta de acordo com o esqueleto (isto é, usando os sublinhados _____).

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

# 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 e executar o código