Heim >Datenbank >MySQL-Tutorial >Wie können Spark SQL-Fensterfunktionen Benutzeraktivitätszeiträume basierend auf komplexen zeitlichen Bedingungen identifizieren?
Verwenden Sie Spark SQL-Fensterfunktionen, um Benutzeraktivitätszyklen basierend auf komplexen Zeitbedingungen zu identifizieren
Die Fensterfunktionen von Spark SQL bieten einen leistungsstarken Mechanismus zum Durchführen von Berechnungen für eine Reihe von Zeilen innerhalb eines bestimmten Zeitbereichs oder einer bestimmten Partition. Eine häufige Anwendung besteht darin, den Beginn eines Benutzeraktivitätszyklus basierend auf bestimmten Bedingungen zu bestimmen.
Definitionsfenster
Dazu definieren wir zwei Fenster:
user_name
und sortiert nach login_date
. user_name
und session
, was später festgelegt wird. Identifiziert den Beginn einer neuen Sitzung
Der Schlüssel zum Bestimmen, wann eine neue Sitzung beginnt, ist der Vergleich der Anmeldedaten aufeinanderfolgender Zeilen. Wenn die Differenz zwischen zwei aufeinanderfolgenden Anmeldedaten mehr als 5 Tage beträgt, wird eine neue Sitzung identifiziert. Wir erfassen dies mit dem folgenden Code:
<code class="language-scala">val newSession = (coalesce( datediff($"login_date", lag($"login_date", 1).over(userWindow)), lit(0) ) > 5).cast("bigint")</code>
Sitzungs-ID zuweisen
Jetzt können wir jeder Zeile eine Sitzungs-ID zuweisen, indem wir die userWindow
-Werte auf newSession
summieren:
<code class="language-scala">val sessionized = df.withColumn("session", sum(newSession).over(userWindow))</code>
Aktivdatum bestätigen
Schließlich bestimmen wir das userSessionWindow
Datum für jede Sitzung, indem wir das kleinste login_date
innerhalb jeder became_active
finden:
<code class="language-scala">val result = sessionized .withColumn("became_active", min($"login_date").over(userSessionWindow)) .drop("session")</code>
Beispiel
Verwenden Sie die bereitgestellten Beispieldaten:
<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>
Das Ergebnis wird sein:
<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>
Dies zeigt, wie Fensterfunktionen in Spark SQL verwendet werden, um komplexe Bedingungen für Zeitdaten effizient zu bestimmen.
Das obige ist der detaillierte Inhalt vonWie können Spark SQL-Fensterfunktionen Benutzeraktivitätszeiträume basierend auf komplexen zeitlichen Bedingungen identifizieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!