Maison > base de données > tutoriel mysql > Comment les fonctions de fenêtre Spark SQL peuvent-elles identifier les périodes d'activité des utilisateurs en fonction de conditions temporelles complexes ?

Comment les fonctions de fenêtre Spark SQL peuvent-elles identifier les périodes d'activité des utilisateurs en fonction de conditions temporelles complexes ?

DDD
Libérer: 2025-01-10 11:39:42
original
859 Les gens l'ont consulté

How Can Spark SQL Window Functions Identify User Activity Periods Based on Complex Temporal Conditions?

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 :

  • userWindow : Partitionné par user_name et trié par login_date.
  • userSessionWindow : Partitionné par 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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal