我有一个类似于下面的Dataframe
+-------+-------+----------+
|dept_id|user_id|entry_date|
+-------+-------+----------+
| 3| 1|2020-06-03|
| 3| 2|2020-06-03|
| 3| 3|2020-06-03|
| 3| 4|2020-06-03|
| 3| 1|2020-06-04|
| 3| 1|2020-06-05|
+-------+-------+----------+
现在我需要添加一个新的列,它应该指示用户的最新输入日期。1表示最新,0表示旧
+-------+-------+----------+----------
|dept_id|user_id|entry_date|latest_rec
+-------+-------+----------+----------
| 3| 1|2020-06-03|0
| 3| 2|2020-06-03|1
| 3| 3|2020-06-03|1
| 3| 4|2020-06-03|1
| 3| 1|2020-06-04|0
| 3| 1|2020-06-05|1
+-------+-------+----------+---------
我试着找出用户的等级
val win = Window.partitionBy("dept_id", "user_id").orderBy(asc("entry_date"))
someDF.withColumn("rank_num",rank().over(win))
现在,我们要学习如何基于rank\u num列填充最新的\u rec列。我该如何进行下一步?
3条答案
按热度按时间ccgok5k51#
不要使用rank,而是使用
last
当您按部门id、用户id和订单条目日期进行分区时,范围从当前行到无限制的后续行作为最新条目日期。然后比较输入日期和最新输入日期,并相应地设置最新记录值。nqwrtyyt2#
我会使用行号来找到最长日期,然后根据它导出您的指标。
ccgok5k53#
另一种替代方法:
加载提供的测试数据
使用max(entry\u date)over(按'dept\u id'、'user\u id'分区)