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:
val newSession = (coalesce( datediff($"login_date", lag($"login_date", 1).over(userWindow)), lit(0) ) > 5).cast("bigint")
Tetapkan ID sesi
Kini kita boleh menetapkan ID sesi pada setiap baris dengan menjumlahkan nilai userWindow
pada newSession
:
val sessionized = df.withColumn("session", sum(newSession).over(userWindow))
Sahkan tarikh aktif
Akhir sekali, kami menentukan tarikh userSessionWindow
untuk setiap sesi dengan mencari login_date
terkecil dalam setiap became_active
:
val result = sessionized .withColumn("became_active", min($"login_date").over(userSessionWindow)) .drop("session")
Contoh
Gunakan data sampel yang disediakan:
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")
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!