Spark流媒体维护状态超过窗口

问题描述 投票:0回答:1

对于火花流,有没有办法只能为当前窗口维护状态?我理解updateStateByKey的作用,但除非我们清除它,否则它将永远保持状态。是否可以存储和重置每个窗口的状态?

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

对象1是调用或响应。

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

但是,由于对象的响应可以在单独的批处理中,因此我需要在批处理中维护状态。

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

谢谢!

java apache-spark spark-streaming
1个回答
0
投票

您可以使用mapWithState转换而不是updateStateByKey,并且可以使用批处理间隔的持续时间设置超出状态规范的时间。由此您可以每次只有最后一批的状态。但是如果您的调用和响应取决于它,它将起作用只有在最后一批。另外明智的当你尝试更新被删除的密钥时它将抛出异常。与updateStateByKey相比,MapwithState的性能更快。

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

import org.apache.spark.streaming._
val stateSpec =
  StateSpec
    .function(updateUserEvents _)
    .timeout(Minutes(5))
© www.soinside.com 2019 - 2024. All rights reserved.