Rumah >pangkalan data >tutorial mysql >Bagaimanakah Fungsi Spark SQL Window Mengenalpasti Tempoh Aktiviti Pengguna Berdasarkan Keadaan Temporal yang Kompleks?
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:
user_name
dan diisih mengikut login_date
. 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>
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>
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>
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>
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>
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!