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
De nouvelles questions
pyspark
L'API Spark Python (PySpark) expose le modèle de programmation apache-spark à Python.