我正在研究一种逻辑,通过比较前一个时间和当前时间,并将值存储在数据库中,找到流层(spark)中两个时间戳之间的连续时间差。
例如:
2017-08-01 11:00:00
2017-08-01 11:05:00
2017-08-01 11:07:00
因此,根据上述时间戳,我的连续差值将分别为5分钟(11:00:00-11:05:00)和2分钟,当我将差值相加时,我将得到7分钟(5+2),这将是实际的时差。。现在真正的挑战是当我收到延迟的时间戳时。
例如:
2017-08-01 11:00:00
2017-08-01 11:05:00
2017-08-01 11:07:00
2017-08-01 11:02:00
在这里,当我计算时差时,分别是5分钟,2分钟,5分钟,现在我将得到12分钟(5+2+5),这将大于实际时差(7分钟),这是错误的
请帮助我找到一个解决方法来处理逐记录时差计算中的延迟时间戳。
1条答案
按热度按时间ghhkc1vu1#
你所经历的是“事件时间”和“处理时间”之间的区别。在最佳情况下,处理时间与事件时间几乎相同,但有时输入记录会延迟,因此差异会更大。
在处理流数据时,可以(显式或隐式地)定义一个查看的记录窗口。如果单独处理记录,则此窗口的大小为1。在您的情况下,您的窗口大小为2。但您也可以有一个基于时间的窗口,即您可以查看过去10分钟内收到的所有记录。
如果要按顺序处理延迟的记录,则需要在延迟的记录到达之前等待,然后在窗口中对记录进行排序。问题是,你要等多久?延迟记录可能会在2天后出现!等待多长时间是一个主观问题,取决于您的应用程序及其要求。
请注意,如果您的窗口是基于时间的,则需要处理没有以前记录的情况。
我强烈推荐这篇文章:https://www.oreilly.com/ideas/the-world-beyond-batch-streaming-101 掌握流媒体术语和窗口。