Rumah > pangkalan data > tutorial mysql > Bagaimanakah Fungsi Spark SQL Window Mengenalpasti Tempoh Aktiviti Pengguna Berdasarkan Keadaan Temporal yang Kompleks?

Bagaimanakah Fungsi Spark SQL Window Mengenalpasti Tempoh Aktiviti Pengguna Berdasarkan Keadaan Temporal yang Kompleks?

DDD
Lepaskan: 2025-01-10 11:39:42
asal
859 orang telah melayarinya

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

Gunakan fungsi tetingkap Spark SQL untuk mengenal pasti kitaran aktiviti pengguna berdasarkan keadaan masa yang kompleks

Fungsi tetingkap Spark SQL menyediakan mekanisme yang berkuasa untuk melakukan pengiraan pada set baris dalam julat masa atau partition yang ditentukan. Aplikasi biasa adalah untuk menentukan permulaan kitaran aktiviti pengguna berdasarkan keadaan tertentu.

Tetingkap definisi

Untuk melakukan ini, kami mentakrifkan dua tetingkap:

  • userWindow: Dibahagikan mengikut user_name dan diisih mengikut login_date.
  • userSessionWindow: Dibahagikan oleh user_name dan session untuk ditentukan kemudian.

Mengenal pasti permulaan sesi baharu

Kunci untuk menentukan bila sesi baharu bermula ialah membandingkan tarikh log masuk baris berturut-turut. Jika perbezaan antara dua tarikh log masuk berturut-turut adalah lebih daripada 5 hari, sesi baharu dikenal pasti. Kami menangkap ini menggunakan kod berikut:

<code class="language-scala">val newSession =  (coalesce(
  datediff($"login_date", lag($"login_date", 1).over(userWindow)),
  lit(0)
) > 5).cast("bigint")</code>
Salin selepas log masuk

Tetapkan ID sesi

Kini kita boleh menetapkan ID sesi pada setiap baris dengan menjumlahkan nilai userWindow pada newSession:

<code class="language-scala">val sessionized = df.withColumn("session", sum(newSession).over(userWindow))</code>
Salin selepas log masuk

Sahkan tarikh aktif

Akhir sekali, kami menentukan tarikh userSessionWindow untuk setiap sesi dengan mencari login_date terkecil dalam setiap became_active:

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

Contoh

Gunakan data sampel yang disediakan:

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

Hasilnya ialah:

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

Ini menunjukkan cara menggunakan fungsi tetingkap dalam Spark SQL untuk menentukan keadaan kompleks pada data temporal dengan cekap.

Atas ialah kandungan terperinci Bagaimanakah Fungsi Spark SQL Window Mengenalpasti Tempoh Aktiviti Pengguna Berdasarkan Keadaan Temporal yang Kompleks?. 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