Scala 火花窗函数依赖于自身
假设我在数据帧中有一列排序的时间戳。我想编写一个函数,向这个数据帧添加一列,根据以下规则将时间戳切割成连续的时间片:Scala 火花窗函数依赖于自身,scala,apache-spark-sql,Scala,Apache Spark Sql,假设我在数据帧中有一列排序的时间戳。我想编写一个函数,向这个数据帧添加一列,根据以下规则将时间戳切割成连续的时间片: 从第一行开始,一直迭代到最后 对于每一行,如果您在当前组中走了n行,或者在当前组中走了超过时间间隔t,则进行剪切 返回一个新列,每行的组分配应为递增整数 英文:每组不应超过n行,且时间跨度不应超过t 例如:(使用整数作为时间戳来简化) 输入 time --------- 1 2 3 5 1
- 从第一行开始,一直迭代到最后
- 对于每一行,如果您在当前组中走了n行,或者在当前组中走了超过时间间隔t,则进行剪切
- 返回一个新列,每行的组分配应为递增整数
time
---------
1
2
3
5
10
100
2000
2001
2002
2003
输出(在n=3和t=5的切片函数之后)
我觉得这可以通过Spark中的窗口功能来实现。毕竟,创建窗口函数是为了帮助开发人员计算移动平均数。您基本上要计算每个n行窗口中一列(股票价格)的聚合(在本例中为平均值)
在这里也应该能够做到这一点。对于每一行,如果最后n行不包含剪切,或者最后一次剪切与当前时间戳之间的时间跨度大于t,cut=true,o.w.cut=false
。但我似乎不知道如何让窗口函数意识到自己。这就像是某一行的移动平均线意识到了最后一个移动平均线
time | group
----------|------
1 | 1
2 | 1
3 | 1
5 | 2 // cut because there were no cuts in the last 3 rows
10 | 2
100 | 3 // cut because 100 - 5 > 5
2000 | 4 // cut because 2000 - 100 > 5
2001 | 4
2002 | 4
2003 | 5 // cut because there were no cuts in the last 3 rows