Rumah >pangkalan data >tutorial mysql >Bagaimanakah Fungsi Spark SQL Window Menentukan Tarikh Pengaktifan Pengguna dengan Tamat Tempoh Berasaskan Sesi?

Bagaimanakah Fungsi Spark SQL Window Menentukan Tarikh Pengaktifan Pengguna dengan Tamat Tempoh Berasaskan Sesi?

DDD
DDDasal
2025-01-10 12:22:42551semak imbas

How can Spark SQL Window Functions Determine User Activation Dates with Session-Based Expiry?

Fungsi tetingkap Spark SQL dan keadaan kompleks

Andaikan anda mempunyai DataFrame yang mengandungi butiran log masuk pengguna dan anda ingin menambah lajur untuk menunjukkan tarikh pengaktifan mereka di tapak web. Walau bagaimanapun, terdapat kaveat: tempoh aktiviti pengguna tamat selepas tempoh masa tertentu, dan log masuk semula akan menetapkan semula tarikh pengaktifan mereka.

Masalah ini boleh diselesaikan menggunakan fungsi tetingkap dalam Spark SQL. Berikut ialah satu cara:

Langkah 1: Tentukan tetingkap

<code>import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions._

val userWindow = Window.partitionBy("user_name").orderBy("login_date")
val userSessionWindow = Window.partitionBy("user_name", "session")</code>

Langkah 2: Kesan permulaan sesi baharu

<code>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>

Langkah 3: Cari tarikh paling awal untuk setiap sesi

<code>val result = sessionized
  .withColumn("became_active", min($"login_date").over(userSessionWindow))
  .drop("session")</code>

Kaedah ini menggunakan tetingkap gelongsor untuk membahagikan data mengikut pengguna dan mengisihnya mengikut tarikh log masuk. Kemudian tentukan tetingkap sesi dengan mengumpulkan baris dengan ID sesi yang sama. Keputusan yang diingini boleh dicapai dengan mengesan apabila sesi baharu bermula (newSession) dan mengira tarikh log masuk paling awal dalam setiap sesi (menjadi_aktif).

Peningkatan Spark terkini

Untuk Spark 3.2 dan ke atas, tetingkap sesi disokong secara asli, menjadikan penyelesaian di atas lebih mudah. Lihat dokumentasi rasmi untuk butiran.

Atas ialah kandungan terperinci Bagaimanakah Fungsi Spark SQL Window Menentukan Tarikh Pengaktifan Pengguna dengan Tamat Tempoh Berasaskan Sesi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn