Soalan:
DataFrame yang mengandungi rekod pengguna yang log masuk ke tapak web. Anda perlu menentukan bila pengguna aktif dan mempertimbangkan tempoh aktiviti. Jika pengguna log masuk semula selepas tempoh ini, tarikh aktif mereka akan ditetapkan semula.
Kaedah yang dicadangkan:
Menggunakan fungsi tetingkap dengan histerisis dan rekursi, kenal pasti log masuk pertama atau terbaharu dalam tempoh aktiviti untuk menentukan tarikh aktiviti.
Penyelesaian asli percikan (>= 3.2):
Spark 3.2 dan lebih tinggi menyokong tetingkap sesi. Lihat dokumentasi rasmi untuk contoh penggunaan.
Penyelesaian warisan (Spark < 3.2):
Fungsi import:
Window
digunakan untuk menentukan tingkapcoalesce
, datediff
, lag
, lit
, min
, sum
Tetingkap definisi:
userWindow
Dibahagikan oleh user_name
dan diisih mengikut login_date
userSessionWindow
Pembahagian user_name
oleh session
dan Cari permulaan sesi baharu:
datediff
dan lag
untuk membandingkan tarikh log masuk dan semak sama ada terdapat jurang yang lebih besar daripada tempoh aktif. cast
untuk menukar hasil kepada bigint
. userWindow
pada sum
untuk mengumpul sesi baharu bermula. Cari tarikh paling awal untuk setiap sesi:
withColumn
untuk menambah session
lajur. userSessionWindow
pada min
untuk mencari login_date
yang paling awal untuk setiap sesi. session
. Contoh:
<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") val result = sessionized //sessionized is assumed to be defined elsewhere, this is a crucial part missing from the original .withColumn("became_active", min($"login_date").over(userSessionWindow)) .drop("session") df.show(5) result.show(5)</code>
Perhatikan bahawa takrifan sessionized
tiada daripada kod contoh, yang merupakan bahagian penting untuk melengkapkan penyelesaian ini. Lajur session
perlu dikira berdasarkan tempoh aktiviti dan tarikh log masuk. Ini biasanya memerlukan fungsi tersuai atau logik fungsi tetingkap yang lebih kompleks. Penyelesaian lengkap memerlukan penambahan kod yang hilang ini.
Atas ialah kandungan terperinci Bagaimana untuk Menentukan Tarikh Aktif Pengguna dalam Spark SQL Menggunakan Fungsi Tetingkap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!