[英]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.