Utilisez les fonctions de fenêtre Spark SQL pour identifier les cycles d'activité des utilisateurs en fonction de conditions temporelles complexes
Les fonctions de fenêtre de Spark SQL fournissent un mécanisme puissant pour effectuer des calculs sur un ensemble de lignes dans une plage de temps ou une partition spécifiée. Une application courante consiste à déterminer le début d’un cycle d’activité d’un utilisateur en fonction de conditions spécifiques.
Fenêtre de définition
Pour ce faire, nous définissons deux fenêtres :
user_name
et trié par login_date
. user_name
et session
à déterminer ultérieurement. Identifie le début d'une nouvelle session
La clé pour déterminer le début d'une nouvelle session est de comparer les dates de connexion de lignes consécutives. Si l'écart entre deux dates de connexion consécutives est supérieur à 5 jours, une nouvelle session est identifiée. Nous capturons cela en utilisant le code suivant :
<code class="language-scala">val newSession = (coalesce( datediff($"login_date", lag($"login_date", 1).over(userWindow)), lit(0) ) > 5).cast("bigint")</code>
Attribuer un identifiant de session
Nous pouvons maintenant attribuer un identifiant de session à chaque ligne en additionnant les userWindow
valeurs sur newSession
:
<code class="language-scala">val sessionized = df.withColumn("session", sum(newSession).over(userWindow))</code>
Confirmer la date d'activité
Enfin, nous déterminons la userSessionWindow
date de chaque séance en trouvant le plus petit login_date
au sein de chaque became_active
:
<code class="language-scala">val result = sessionized .withColumn("became_active", min($"login_date").over(userSessionWindow)) .drop("session")</code>
Exemple
Utilisez les exemples de données fournis :
<code class="language-scala">val df = Seq( ("SirChillingtonIV", "2012-01-04"), ("Booooooo99900098", "2012-01-04"), ("Booooooo99900098", "2012-01-06"), ("OprahWinfreyJr", "2012-01-10"), ("SirChillingtonIV", "2012-01-11"), ("SirChillingtonIV", "2012-01-14"), ("SirChillingtonIV", "2012-08-11") ).toDF("user_name", "login_date")</code>
Le résultat sera :
<code>+----------------+----------+-------------+ | user_name|login_date|became_active| +----------------+----------+-------------+ | OprahWinfreyJr|2012-01-10| 2012-01-10| |SirChillingtonIV|2012-01-04| 2012-01-04| |SirChillingtonIV|2012-01-11| 2012-01-11| |SirChillingtonIV|2012-01-14| 2012-01-11| |SirChillingtonIV|2012-08-11| 2012-08-11| |Booooooo99900098|2012-01-04| 2012-01-04| |Booooooo99900098|2012-01-06| 2012-01-04| +----------------+----------+-------------+</code>
Cela montre comment utiliser les fonctions de fenêtre dans Spark SQL pour déterminer efficacement des conditions complexes sur des données temporelles.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!