用于增加排名信息,rank
需求一:根据用户id进行排序,增加排名列。
from pyspark.sql import Window
#新增列名称:rownumber
df3 = df2.withColumn("rownumber",F.row_number().over(Window.orderBy("id")))
需求二:根据不同用户类型,结合用户id 进行排序,增加列排名。
#选择desc,esc定义升序、降序。partition中可选多字段。
df3= df2.withColumn("RANKING",F.row_number().over(Window.partitionBy(["CONS_type"]).orderBy(desc("id"))))
用户数据平移lag,lead
需求三:对一列数据进行平移,实现行数据之间的计算
#定义窗口信息:数据窗口根据ID进行分区,根据ID,DATA_DATE进行排序。
window = Window.orderBy("ID","DATA_DATE").partitionBy("ID")
#将列'R'进行平移,新增一列'R_1'。lead是第二行平移到第一行,lag是第一行平移到第二行,结合实际需求进行选择。
df = df.withColumn('R_1',lead(col('R')).over(window))
pyspark中lead\lag函数只能结合窗口函数使用,窗口函数的逻辑和groupby类似。