將以點記法撰寫的 window 函式轉為 SQL
我們要在火車時刻表中新增一個欄位,讓每一列都包含此班車到達下一站所需的分鐘數。
- 我們有一個 dataframe
df,且df.columns == ['train_id', 'station', 'time']。 df已註冊為名為schedule的 SQL 資料表。- 下列的 window 函式查詢使用點記法,會產生新的 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)
請注意 unix_timestamp 函式的使用,它等同於 SQL 的 UNIX_TIMESTAMP 函式。
請留意範例程式碼中的樣板。依照樣板格式化你的答案,能避免因為格式問題而被錯誤判定為不正確。
本練習屬於課程
Python Spark SQL 入門
練習說明
- 建立一個 SQL 查詢,讓結果與
dot_df完全相同。請依照樣板格式撰寫查詢(也就是保留底線佔位符_____的位置與格式)。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# 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()