Apache spark 获取Spark结构化流中窗口的所有行

Apache spark 获取Spark结构化流中窗口的所有行,apache-spark,spark-structured-streaming,Apache Spark,Spark Structured Streaming,我有一个用例,我们需要在窗口内的数据中找到模式。我们正在试验结构化流媒体。我们有一个连续的事件流,正在寻找类似事件a(设备断开连接)和事件B(设备重新连接)在10秒内发生的模式。或者,事件A(断开连接)之后10秒内未发生事件B(重新连接) 我考虑使用一个窗口函数将数据集分组为10秒的窗口桶,并在每次更新窗口值时检查模式。在结构化流媒体中,window函数实际上被用作groupBy,这迫使我使用聚合函数来获取列值的高级agg 我想知道在结构化流媒体中使用窗口函数时,是否有一种方法可以循环遍历列的所

我有一个用例,我们需要在窗口内的数据中找到模式。我们正在试验结构化流媒体。我们有一个连续的事件流,正在寻找类似事件a(设备断开连接)和事件B(设备重新连接)在10秒内发生的模式。或者,事件A(断开连接)之后10秒内未发生事件B(重新连接)

我考虑使用一个窗口函数将数据集分组为10秒的窗口桶,并在每次更新窗口值时检查模式。在结构化流媒体中,window函数实际上被用作groupBy,这迫使我使用聚合函数来获取列值的高级agg


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

您可能想尝试使用mapGroupsWithState(结构化流)或mapWithState(数据流),这听起来似乎对您的案例很有效

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

您也可以为此使用超时,例如,将A到来时的初始状态设置为10秒,如果B到来时A仍然存在,则生成事件


关于与mapGroupsWithState和mapWithState之间的差异,您是否找到了不分组的方法?我有一个类似的用例,我不想执行高级聚合,而是在windows上获取事件,并像上面提到的那样执行CEP。@BiplobBishwas nope。我最终使用了dstream,并按键分组。感谢您的回复,这正是我们现在想做的。如果这不符合我们的预期,我们可能很快就会转向Flink CEP。无论如何,谢谢你的回复。