J'ai des données comme celle-ci:

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

Ce que je veux c'est:

  • userID sessionID time
  • 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

Puis-je me regrouper par seeionsID et appliquer un UDF sur chaque groupe et obtenir l'ID utilisateur de chaque ligne dans chaque session.

mise à jour: je l'ai résolu en remplaçant la chaîne vide par null puis:

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)
0
BerSerK 4 nov. 2019 à 04:56

1 réponse

remplacer la chaîne vide "" par null puis:

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)
0
BerSerK 7 nov. 2019 à 09:16