mapWithState()。timeout()触发一些函数

时间:2016-04-12 08:47:03

标签: apache-spark spark-streaming session-timeout

我想使用mapWithState().timeout()函数作为事件来触发其他一些函数。有办法吗?

我已经阅读了一些statesnapshot()来查找timeout日志消息,但没有找到足够的内容。这是我的问题的某种答案的开始吗?哪里可以找到更多相关信息?

1 个答案:

答案 0 :(得分:4)

  

我想将mapWithState().timeout()函数用作事件   触发一些其他功能。有没有办法这样做

是的,这是可能的。您可以做的是定义一旦超时发生时要调用的操作。你怎么知道MapWithStateRDD何时发生超时?您可以查看State[S].isTimingOut()方法。一旦超时,此方法将产生truemapWithState最后一次执行StateSpec方法,value设置为None

object Foo {
  def main(args: Array[String]): Unit = {
    val spec = StateSpec.function(updateState _).timeout(Milliseconds(5))
    // Use spec to invoke `mapWithState`
  }

  def updateState(key: Int, value: Option[Int], state: State[Int]): Option[Int] = {
    value match {
      case Some(number) => Some(number + 1)
      case _ if state.isTimingOut() => // Trigger Code Here
  }
}