我的日期列包含所有的兩個日期DepartmentID,一個是start_date,另一個是end_date。輸出將有兩列用于開始和結束日期。我想使用 SQL 視窗函式或 Spark Dataframe 來實作。
輸入
Employee ID Date DepartmentID SupervisorID
10001 20130101 001 10009
10001 20130909 001 10019
10001 20131201 002 10018
10001 20140501 002 10017
10001 20141001 003 10015
10001 20141201 003 10014
預期產出
Employee ID DateStart DateEnd DepartmentID
10001 20130101 20131201 001
10001 20131201 20141001 002
10001 20141001 Null 003
uj5u.com熱心網友回復:
假設您將資料框注冊為名為“tmp”的臨時視圖,并運行以下 SQL 以獲得預期結果。
select EmployeeID,DateStart,
lead(DateStart) over (order by DateStart) DateEnd,DepartmentID
from
(select EmployeeID,min(Date) DateStart,DepartmentID
from tmp
group by EmployeeID,DepartmentID)
uj5u.com熱心網友回復:
不知道為什么DateEnd部門 003 是Null. 應該是20141201我對你的問題的理解。這是使用 group by 和聚合的 Scala 版本。min 是開始日期,max 是結束日期,如果只有一行,我們將結束設定為 null。
df
.groupBy("DepartmentID", "Employee ID")
.agg(min('Date) as "DateStart", max('Date) as "DateEnd", count('*) as "count")
.withColumn("DateEnd", when('count > 1, 'DateEnd))
.drop("count").show(false)
------------ ----------- --------- --------
|DepartmentID|Employee ID|DateStart|DateEnd |
------------ ----------- --------- --------
|002 |10001 |20131201 |20140501|
|003 |10001 |20141001 |20141201|
|001 |10001 |20130101 |20130909|
------------ ----------- --------- --------
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/311445.html
