【发布时间】:2020-03-20 19:12:52
【问题描述】:
我有一个数据框,其中值 label 与 (id, bin, date, hour) 相关联:
+----------+----+-----+---+-------------------+
| date|hour| id|bin| label|
+----------+----+-----+---+-------------------+
|2019_12_20| 8| 1| 0| 151.7050821002368|
|2019_12_20| 8| 1| 2| 101.13672140015788|
|2019_12_20| 8| 1| 3| 16.856120233359647|
...
我想在前一天的同一小时、前一天的一小时前等将多个列附加到与label 对应的此数据帧中。我知道如何使用滞后函数获得第一个:
val dateWindow = Window.partitionBy($"id", $"bin").orderBy($"hour", $"date")
val expandedDf = data.withColumn("yesterdaySameHour", lag($"label", 1, 0.0).over(dateWindow))
但是,我不知道如何在前一天在hour - 1 获得值label。有没有办法有条件滞后,我可以过滤掉大于或等于当前行小时的hour?如果没有,这样做的正确方法是什么?
非常感谢。
【问题讨论】:
-
将日期移至partitionby。
标签: scala apache-spark apache-spark-sql