開始使用免費開始

將以點記法撰寫的 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()
編輯並執行程式碼