開始使用免費開始

Selecting II

和 SQL 類似,你也可以使用 .select() 方法進行欄位層級的運算。當你使用 df.colName 標記法選取欄位時,你可以對該欄位執行任意運算,而 .select() 會回傳轉換後的欄位。例如,

flights.select(flights.air_time/60)

會回傳以小時計算的航班時間欄位,而不是以分鐘。你也可以用 .alias() 方法重新命名選取的欄位。因此,如果你想要 .select() 名為 duration_hrs(目前不在你的 DataFrame 中)的欄位,可以這樣寫:

flights.select((flights.air_time/60).alias("duration_hrs"))

等價的 Spark DataFrame 方法 .selectExpr() 會接受字串形式的 SQL 運算式:

flights.selectExpr("air_time/60 as duration_hrs")

其中 SQL 的 as 關鍵字等同於 .alias() 方法。若要選取多個欄位,可以傳入多個字串。

請記得,名為 sparkSparkSession 已經在你的工作環境中,還有 Spark DataFrame flights

本練習屬於課程

PySpark 基礎

檢視課程

練習說明

建立一個同時包含每趟航班平均速度的資料表(兩種方式)。

  • distance 除以(轉換為小時的)air_time 計算平均速度。使用 .alias() 方法將此欄位命名為 "avg_speed"。將輸出儲存為變數 avg_speed
  • 選取欄位 "origin", "dest", "tailnum",以及 avg_speed(不要加引號!)。將結果儲存為 speed1
  • 使用 .selectExpr() 和包含 SQL 運算式的字串,建立相同的資料表。將結果儲存為 speed2

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

# Define avg_speed
avg_speed = (flights.____/(flights.____/60)).alias("____")

# Select the correct columns
speed1 = flights.select("origin", "dest", "tailnum", avg_speed)

# Create the same table using a SQL expression
speed2 = flights.selectExpr("____", "____", "____", "distance/(air_time/60) as ____")
編輯並執行程式碼