3

我有一个用例,我们需要在窗口内的数据中查找模式。我们正在试验结构化流。我们有一个连续的事件流,并且正在寻找诸如事件 A(设备断开连接)在 10 秒内跟随事件 B(设备重新连接)的模式。或事件 A(断开连接)在 10 秒内没有跟随事件 B(重新连接)。

我正在考虑使用窗口函数将数据集分组为 10 秒的窗口桶,并在每次更新窗口值时检查模式。看起来窗口函数真的被用作结构化流中的 groupBy ,这迫使我使用聚合函数来获取列值的高级聚合。

我想知道在结构化流中使用窗口函数时是否有一种方法可以遍历列的所有值。

4

1 回答 1

1

您可能想尝试使用 mapGroupsWithState(结构化流)或 mapWithState(DStreams),听起来它可以很好地满足您的情况。

您可以为任何键保留任意状态,并在每次更新时更新状态。您还可以为每个键设置超时,之后其状态将被删除。对于您的用例,您可以将事件 A 的初始状态存储为 A 到达的时间戳,当事件 B 到来时,您可以检查时间戳是否在 A 的 10 秒内。如果是,则生成一个事件。

您也可以为此使用超时,例如在 A 到来时设置初始状态,将超时设置为 10 秒,如果 B 到来时 A 还在附近,则生成一个事件。

关于 b/w mapGroupsWithState 和 mapWithState 差异的好博文

于 2017-08-11T04:34:31.400 回答