Pivot 與 Join
能夠對複合欄位進行展開(explode)與樞紐分析(pivot)很實用,不過這樣只會留下包含那些 pivot 值的 DataFrame。要真正有用,你需要把它重新與原始資料集做關聯(join)!在完成資料集合併後,對於新建立的欄位我們會有許多 NULL。由於我們知道這些欄位的產生脈絡,可以放心地用 0 補上,因為新欄位要嘛有該屬性,要嘛沒有。
本練習屬於課程
使用 PySpark 進行特徵工程
練習說明
- 以記錄編號
NO使用groupBy()來對ex_garage_list的值做 pivot;使用提供的程式碼彙總constant_val,以忽略 null 並取第一個值。 - 使用
NO作為關聯條件,將piv_df與df進行 left join。 - 使用
piv_df的columns屬性建立要以 0 補值的欄位清單zfill_cols。 - 使用
fillna()並搭配subset,將 pivot 後 DataFrame 的欄位zfill_cols以 0 補值。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
from pyspark.sql.functions import coalesce, first
# Pivot
piv_df = ex_df.____(____).____(____).agg(coalesce(first(____)))
# Join the dataframes together and fill null
joined_df = ____.join(____, on='NO', how=____)
# Columns to zero fill
zfill_cols = ____.____
# Zero fill the pivoted values
zfilled_df = joined_df.____(0, subset=____)