Optimierung der Became_Active-Datumszuweisung in Spark SQL mithilfe von Fensterfunktionen
Dieses Beispiel zeigt die Zuweisung eines became_active
Datums zu Benutzer-Anmeldedaten unter Berücksichtigung eines bestimmten Zeitfensters. Während ein einfacher Fensterfunktionsansatz ausreichend erscheinen mag, wird im Folgenden eine robustere Lösung, insbesondere für ältere Spark-Versionen, vorgestellt.
Spark 3.2 und höher
Spark 3.2 und spätere Versionen bieten Sitzungsfenster (SPARK-10816, SPARK-34893), was diese Aufgabe erheblich vereinfacht. Diese integrierten Funktionen befassen sich direkt mit der Sitzungsidentifizierung und der Datumszuordnung. Einzelheiten zur Verwendung von Sitzungsfenstern finden Sie in der Spark-Dokumentation.
Spark-Versionen vor 3.2
Für Spark-Versionen vor 3.2 ist ein mehrstufiger Ansatz erforderlich:
<code class="language-scala">import org.apache.spark.sql.expressions.Window import org.apache.spark.sql.functions.{coalesce, datediff, lag, lit, min, sum}</code>
<code class="language-scala">val userWindow = Window.partitionBy("user_name").orderBy("login_date") val userSessionWindow = Window.partitionBy("user_name", "session")</code>
Dieser Schritt bestimmt den Beginn neuer Benutzersitzungen basierend auf einer 5-tägigen Lücke in den Anmeldedaten.
<code class="language-scala">val newSession = (coalesce( datediff($"login_date", lag($"login_date", 1).over(userWindow)), lit(0) ) > 5).cast("bigint") val sessionized = df.withColumn("session", sum(newSession).over(userWindow))</code>
Abschließend wird das früheste Anmeldedatum innerhalb jeder Sitzung als became_active
Datum zugewiesen.
<code class="language-scala">val result = sessionized .withColumn("became_active", min($"login_date").over(userSessionWindow)) .drop("session")</code>
Diese Methode füllt die Spalte became_active
effektiv für jeden Benutzer unter Einhaltung des definierten Zeitrahmens auf und bietet eine sauberere Lösung als ein rekursiver Ansatz für Spark-Versionen vor 3.2. Die Spalte session
, die als Vermittler dient, wird anschließend gelöscht.
Das obige ist der detaillierte Inhalt vonWie kann ich Benutzeranmeldedaten mithilfe von Spark SQL-Fensterfunktionen effizient Became_Active-Daten zuweisen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!