Как применить функцию к каждой строке в группе после groupby в pyspark?

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

  • userID sessionID time
  • «» xxx 01.06.2019
  • "" xxx 02.06.2019
  • user1 xxx 2019-06-03
  • "" ггг 2019-06-04
  • user2 ггг 2019-06-05
  • "" ггг 2019-06-06
  • user3 ггг 2019-06-07

Я хочу:

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

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

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

person BerSerK    schedule 04.11.2019    source источник
comment
Нужны дополнительные сведения, как row1 и row2 будут иметь userID - user1 ... и т. Д.   -  person Rahul    schedule 04.11.2019
comment
спасибо, я решил это.   -  person BerSerK    schedule 07.11.2019


Ответы (1)


замените пустую строку "" на 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)
person BerSerK    schedule 07.11.2019