繁体   English   中英

Spark流在窗口上保持状态

[英]Spark streaming maintain state over window

对于Spark Streaming,有什么方法可以仅针对当前窗口维护状态? 我知道updateStateByKey可以工作,但是除非我们清除它,否则它将永远保持状态。 是否可以按窗口存储和重置状态?

提供更多背景信息。 我正在尝试在窗口流中将一种类型的对象转换为另一种类型。 但是,转换如下:

对象1是调用或响应。

在看到调用和响应之前,对象2才被认为是完整的。

但是,由于该对象的响应可能在单独的批次中,因此我需要在各个批次之间维护状态。

但是我只希望维护当前窗口的状态。 有什么方法可以通过火花实现这一目标。

谢谢!

您可以使用mapWithState转换而不是updateStateByKey,并且可以将批次间隔的持续时间设置为State规范的超时时间,这样每次您只能拥有最后一个批次的状态,但是如果您调用和响应取决于仅在最后一批上。否则,当您尝试更新已删除的密钥时,它将引发异常。 与updateStateByKey相比,MapwithState性能更快。

您可以在下面找到示例代码段。

import org.apache.spark.streaming._
val stateSpec =
  StateSpec
    .function(updateUserEvents _)
    .timeout(Minutes(5))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM