编写一个 window 函数 Spark
Write a window function Spark
我有一个 table:
+-------------------+-------------+--------------+-------+-------------+
| 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|
+-------------------+-------------+--------------+-------+-------------+
我想从这个 table:
中获取最后一个会话
local-1641922005080 :String
我可以使用 window 函数来实现吗?
我有解决办法:
val lastSessionId = ds.select(max(struct(col("insert_dttm"), col("session_id")))("session_id"))
.first.getString(0)
只是我也想用window函数实现这个
实际上您不需要 window 函数,因为您可以按 desc
顺序对数据进行排序,return 使用 limit(1)
对第一条记录进行排序。
但为了练习,您可以像这样使用 window 函数:
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)
我有一个 table:
+-------------------+-------------+--------------+-------+-------------+
| 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|
+-------------------+-------------+--------------+-------+-------------+
我想从这个 table:
中获取最后一个会话local-1641922005080 :String
我可以使用 window 函数来实现吗?
我有解决办法:
val lastSessionId = ds.select(max(struct(col("insert_dttm"), col("session_id")))("session_id"))
.first.getString(0)
只是我也想用window函数实现这个
实际上您不需要 window 函数,因为您可以按 desc
顺序对数据进行排序,return 使用 limit(1)
对第一条记录进行排序。
但为了练习,您可以像这样使用 window 函数:
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)