我有这样的数据:
- 用户ID会话ID时间
- “” xxx 2019-06-01
- “” xxx 2019-06-02
- user1 xxx 2019-06-03
- “” yyy 2019-06-04
- user2 yyy 2019-06-05
- “” yyy 2019-06-06
- user3 yyy 2019-06-07
我想要的是:
- 用户ID会话ID时间
- user1 xxx 2019-06-01
- user1 xxx 2019-06-02
- user1 xxx 2019-06-03
- user2 yyy 2019-06-04
- user2 yyy 2019-06-05
- user3 yyy 2019-06-06
- user3 yyy 2019-06-07
我可以对seesionID进行分组并在每个组上应用UDF并获取每个会话中每一行的用户ID。
更新: 我通过将空字符串替换为null来解决它:
from pyspark.sql import Window
from pyspark.sql.functions import first
import sys
# define the window
window = Window.partitionBy('jsession')\
.orderBy('request_time')\
.rowsBetween(0,sys.maxsize)
# define the forward-filled column
filled_column = first(df['userid'],ignorenulls=True).over(window)
# do the fill
df = df.withColumn('filled_userid',filled_column)