Как применить функцию к каждой строке в группе после группового в pyspark? - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть такие данные:

  • userID sessionID time
  • "" xxx 2019-06-01
  • "" xxx 2019-06-02
  • user1 xxx 2019-06-03
  • "" ггг 2019-06-04
  • user2 ггг 2019-06-05
  • "" ггг 2019-06-06
  • user3 ггг 2019-06-07

То, что я хочу:

  • userID sessionID time
  • user1 xxx2019-06-01
  • user1 xxx 2019-06-02
  • user1 xxx 2019-06-03
  • user2 ггг 2019-06-04
  • user2 yyy 2019-06-05
  • user3 yyy 2019-06-06
  • user3 yyy 2019-06-07

Могу ли я группировать по seesionID и применятьUDF для каждой группы и получить userID каждой строки в каждом сеансе.

update: я решил это, заменив пустую строку на 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)

1 Ответ

0 голосов
/ 07 ноября 2019

замените пустую строку "" на ноль, затем:

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)
...