使用 PySpark 进行特征工程
John Hogue
Lead Data Scientist, General Mills



from pyspark.sql.functions import to_date
# 将数据类型转换为日期
df = df.withColumn('LISTDATE', to_date('LISTDATE'))
# 查看字段
df[['LISTDATE']].show(2)
+----------+
| LISTDATE|
+----------+
|2017-07-14|
|2017-10-08|
+----------+
only showing top 2 rows
from pyspark.sql.functions import year, month
# 新增年份列
df = df.withColumn('LIST_YEAR', year('LISTDATE'))
# 新增月份列
df = df.withColumn('LIST_MONTH', month('LISTDATE'))
from pyspark.sql.functions import dayofmonth, weekofyear
# 新增月内日序列
df = df.withColumn('LIST_DAYOFMONTH', dayofmonth('LISTDATE'))
# 新增年内周序列
df = df.withColumn('LIST_WEEKOFYEAR', weekofyear('LISTDATE'))

from pyspark.sql.functions import datediff
# 计算两个日期字段的差值
df.withColumn('DAYSONMARKET', datediff('OFFMARKETDATE', 'LISTDATE'))

window()
基于一组记录返回一条记录
lag(col, count=1)
返回当前行之前偏移行的值
from pyspark.sql.functions import lag from pyspark.sql.window import Window# 创建窗口 w = Window().orderBy(m_df['DATE'])# 创建滞后列 m_df = m_df.withColumn('MORTGAGE-1wk', lag('MORTGAGE', count=1).over(w))# 查看结果 m_df.show(3)
+----------+------------+----------------+
| DATE| MORTGAGE| MORTGAGE-1wk|
+----------+------------+----------------+
|2013-10-10| 4.23| null|
|2013-10-17| 4.28| 4.23|
|2013-10-24| 4.13| 4.28|
+----------+------------+----------------+
only showing top 3 rows
使用 PySpark 进行特征工程