在pyspark中的groupby之后如何在组的每一行上应用功能?

我有这样的数据:

  • 用户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)
bsyang1225 回答:在pyspark中的groupby之后如何在组的每一行上应用功能?

将空字符串“”替换为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)
本文链接:https://www.f2er.com/3169452.html

大家都在问