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
Lepaskan: 2025-01-10 12:22:42
asal
498 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

Langkah 3: Cari tarikh paling awal untuk setiap sesi

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

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan