首页 > 解决方案 > Spark Structured Streaming 忽略旧记录

问题描述

我是新手,可以帮助我找到解决这个问题的方法。我正在接收输入文件,其中包含有关发生事件的信息,并且文件本身具有时间戳值。事件 ID 是此输入的主要列。请参阅下面的示例输入(实际文件有许多其他列)。

Event_Id | Event_Timestamp

1        | 2018-10-11 12:23:01

2        | 2018-10-11 13:25:01

1        | 2018-10-11 14:23:01

3        | 2018-10-11 20:12:01

当我们得到上述输入时,我们需要根据事件 id、时间戳和预期输出来获取最新记录

Event_Id | Event_Timestamp

2        | 2018-10-11 13:25:01

1        | 2018-10-11 14:23:01

3        | 2018-10-11 20:12:01

此后,每当我收到时间戳值小于上述值的事件信息时,我需要忽略,例如,考虑第二个输入

Event_Id | Event_Timestamp

2        | 2018-10-11 10:25:01

1        | 2018-10-11 08:23:01

3        | 2018-10-11 21:12:01

现在我需要忽略 event_id 1 和 2,因为它有旧的时间戳,表明我们现在拥有的状态。只有事件 3 会被传递,这里的预期输出是

3        | 2018-10-11 21:12:01

假设我们有 n 个唯一(100 亿)个事件 ID,它将如何存储在 spark 内存中,是否需要注意一些事情。

提前致谢

标签: apache-spark

解决方案


我们可以采用 max timestamp 并使用带有 disk_only 或 disk_only2 存储级别的 persist() 方法……在这种情况下,我认为我们可以实现这一点……由于它是流数据,我们也可以尝试使用 memory_only 或 memory_only2 存储级别。 ..

请尝试更新..


推荐阅读