我有一个用例,我们需要在窗口中查找数据模式。我们正在尝试使用结构化流媒体。我们有一个持续的事件流,并且正在寻找事件A(设备断开连接)之类的模式,然后在10秒内寻找事件B(设备重新连接)。或事件A(断开连接)在10秒内未跟随事件B(重新连接)。
我在考虑使用窗口函数将数据集分组到10秒窗口桶中,并在每次更新窗口值时检查模式。看起来窗口函数实际上在结构化流中用作groupBy,这迫使我使用聚合函数来获得列值的高级别聚合。
我想知道在结构化流媒体中使用窗口函数时是否有办法遍历列的所有值。
答案 0 :(得分:0)
您可能想尝试使用mapGroupsWithState(结构化流媒体)或mapWithState(DStreams),听起来它可以很好地适用于您的情况。
您可以为任何密钥保持任意状态,并在每次更新时更新状态。您还可以为每个键设置超时,之后将删除其状态。对于您的用例,您可以将事件A的初始状态存储为A到达时的时间戳,当事件B到来时,您可以检查时间戳是否在A的10秒内。如果是,则生成事件。
您也可以使用超时功能,例如:当A到来时设置初始状态,将超时设置为10s,如果A到来时A仍然存在,则生成事件。
Good blog post关于差异b / w mapGroupsWithState和mapWithState