apache-spark - 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 内存中,是否需要注意一些事情。
提前致谢
解决方案
我们可以采用 max timestamp 并使用带有 disk_only 或 disk_only2 存储级别的 persist() 方法……在这种情况下,我认为我们可以实现这一点……由于它是流数据,我们也可以尝试使用 memory_only 或 memory_only2 存储级别。 ..
请尝试更新..