Pivot 与 Join
能够对复合字段进行 explode 和 pivot 很有用,但这样只会得到仅包含透视后取值的 dataframe。要真正发挥价值,您需要把它重新与原始数据集进行连接!连接后,新创建列中会出现很多 NULL 值。鉴于我们清楚这些列的生成方式,可以放心地将它们用 0 填充——要么新的样本具有该属性,要么不具有。
本练习是课程的一部分
使用 PySpark 进行特征工程
练习说明
- 使用
groupBy()以记录 IDNO分组,对ex_garage_list的取值进行透视(pivot)。使用提供的代码对constant_val做聚合,以忽略空值并取第一个值。 - 使用
NO作为连接条件,将piv_df左连接到df。 - 使用
piv_df的columns属性创建要用 0 填充的列名列表zfill_cols。 - 使用带有
subset的fillna(),对透视得到的 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=____)