Pyspark结构化流动态滑动窗口

时间:2019-01-15 23:22:39

标签: apache-spark pyspark spark-structured-streaming

我正在尝试相对于事件时间列,在s1列上获取过去x分钟(例如-10分钟)内所有行的最大平均值。除了数据来自卡夫卡而来。我想为每一个传入的行计算过去x分钟内所有行的一列的最大值和平均值。

行的传入流以毫秒为单位(这是我要滑动窗口的时间)。 因此,让我们说:

  Streaming Input to spark                              Output from spark to kafka
1 {ts:"2018-10-04 10:18:32.001", s1:"24"}               {ts:"2018-10-04 10:18:32.001", s1:"24", s1max10mins:"somevalue"}
2 {ts:"2018-10-04 10:18:32.300", s1:"36"}               {ts:"2018-10-04 10:18:32.300", s1:"36", s1max10mins:"somevalue"}
3 {ts:"2018-10-04 10:18:33.600", s1:"11"}               {ts:"2018-10-04 10:18:32.600", s1:"11", s1max10mins:"somevalue"}
4 {ts:"2018-10-04 10:18:33.800", s1:"10"}               {ts:"2018-10-04 10:18:32.800", s1:"10", s1max10mins:"somevalue"}
.
.
.
.
100 {ts:"2018-10-04 10:18:42.000", s1:"6"}             {ts:"2018-10-04 10:18:42.000", s1:"6", s1max10mins:"36"}
101 {ts:"2018-10-04 10:18:42.400", s1:"7"}             {ts:"2018-10-04 10:18:42.400", s1:"7", s1max10mins:"11"}

如果我有一个最小滑动窗口,那么对于100行和101行,我都会得到“ s1max10mins”为36。但是我希望窗口相对于当前时间戳(事件时间)动态滑动至毫秒。

是否可以通过除窗口之外的任何其他方法来实现。这里没有粘贴任何代码,因为我的加窗/水印代码对于10分钟的窗口和1分钟的静态滑动间隔都可以正常工作。将滑动窗口设置为10秒确实会占用系统资源。因此,甚至不想尝试滑动窗口约500毫秒。 同样,我的代码可以很好地从Kafka读取流并沉入Kafka。

我只想要相对于当前时间戳的过去10分钟内所有记录的最大/平均列,然后将其放在另一列(例如“ s1max10mins”)中,然后传递回触发外部脚本的Kafka。除了窗口之外,我还可以使用其他选项从当前事件时间准确计算出10分钟吗?

0 个答案:

没有答案