我有一張桌子:
------------------- ------------- -------------- ------- -------------
| session_id| insert_dttm| key| value| process_name|
------------------- ------------- -------------- ------- -------------
|local-1641922005078|1641922023703|test_file1.csv|Success|ProcessResult|
|local-1641922005078|1641922023704|test_file1.csv|Success|ProcessResult|
|local-1641922005078|1641922023705|test_file2.csv|Success|ProcessResult|
|local-1641922005080|1641922023706|test_file2.csv|Success|ProcessResult|
|local-1641922005080|1641922023707|test_file3.csv|Success|ProcessResult|
|local-1641922005080|1641922023708|test_file3.csv|Success|ProcessResult|
------------------- ------------- -------------- ------- -------------
我想從此表中獲取最后一個會話:
local-1641922005080 :String
我可以使用視窗函式來做到這一點嗎?
我有解決方案:
val lastSessionId = ds.select(max(struct(col("insert_dttm"), col("session_id")))("session_id"))
.first.getString(0)
只有我還想用視窗函式來實作它。
uj5u.com熱心網友回復:
實際上,您在這里不需要視窗函式,因為您只需按順序對資料進行desc排序并使用limit(1).
但是為了練習,你可以像這樣使用視窗函式:
import org.apache.spark.sql.functions.{col, row_number}
import org.apache.spark.sql.expressions.Window
val windowSpec = Window.orderBy(col("insert_dttm").desc)
val lastSessionId = df.withColumn("row_number", row_number.over(windowSpec)).filter("row_number=1").first.getString(0)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/412154.html
標籤:
