spark lag高级函数应用--Session 划分
需求分析
有一组数据是用户观看观看视频,浏览网页的记录,三列:user_id,start_time,end_time
用户从start_time开始浏览网页,到end_time结束浏览当前网页,我们想对用户的观看进行session划分,规定如果用户的访问间隔超过一天,那么就认为这两条记录是两个session的数据,否则是一个session的数据。
lag/lead 函数解释
他们都是window 函数,常见的window函数是row_number, 先贴出spark源码官方解释以免解释不清造成误解。1.对于lag: 有三个参数column, offset. column就是你想取值的那一列,offset就是你想向上取第几列的值。1表示当前行的前一行,2 表示当前行向上数第二行。defaultValue就是默认值
用法 : 首先分组排序逻辑
import org.apache.spark.sql.expressions.Window
val win = Window.partitionBy("user_id").orderBy("start_time")
val dfx = df.withColumn("befor_end_time",F.lag($"end_time",1).o