Spark Scala-数据框上的可变窗口范围

时间:2018-11-13 13:23:13

标签: scala apache-spark

我有一个如下所示的Spark数据框:

+-----+--------+ | user|timestamp| +-----+---------+ |user1| 0| |user1| 6| |user2| 6| |user1| 28| |user2| 37| |user2| 70| |user2| 77| +-----+---------+ 我用val window = Window.partitionBy($"user").orderBy($"timestamp")来创建窗口。

对于每一行,我必须检查当前行和上一行之间的时间戳差异是否小于30:如果是,则使begin为最后重置该窗口的第一个时间戳;否则将begin设置为当前时间戳。

我用过

df.withColumn("begin", when($"timestamp" - lag($"timestamp",1).over(window) < 30 , first($"timestamp").over(window)).otherwise($"timestamp"))

但这会在整个窗口中花费first时间戳,结果如下:

+-----+---------+----+ | user|timestamp|begin| +-----+---------+-----+ |user1| 0| 0| |user1| 6| 0| |user1| 28| 0| |user2| 6| 6| |user2| 37| 6| |user2| 70| 70| |user2| 77| 6| +-----+---------+-----+ 但是我希望输出在最后一次重置时在窗口上具有first时间戳(输出应该在最后一行中将列begin作为70而不是{{1 }}):

6

我该如何进行? Spark是否支持此可变长度窗口范围?

0 个答案:

没有答案