我想知道是否有可能在整个应用程序中保持完全不同的状态?例如,第一个状态的update function
是否从第二个状态调用?处理不同的状态
我不记得经历过任何这样的例子,也没有找到任何计数器指示......基于https://docs.cloud.databricks.com/docs/spark/1.6/examples/Streaming%20mapWithState.html的例子,我知道没有理由为什么我不能有不同的trackStateFunc
s与不同State
s,进一步更新那些由于他们的Key
,如下图所示:
def firstTrackStateFunc(batchTime: Time,
key: String,
value: Option[Int],
state: State[Long]): Option[(String, Long)] = {
val sum = value.getOrElse(0).toLong + state.getOption.getOrElse(0L)
val output = (key, sum)
state.update(sum)
Some(output)
}
和
def secondTrackStateFunc(batchTime: Time,
key: String,
value: Option[Int],
state: State[Int]): Option[(String, Long)] = {
// disregard problems this example would cause
val dif = value.getOrElse(0) - state.getOption.getOrElse(0L)
val output = (key, dif)
state.update(dif)
Some(output)
}
我认为这是可能的,但仍然不能确定。我希望有人验证或无效这个假设...
你想要输入是相同的,但有能力更新一个状态在另一个?或者你想从第一个状态中获取状态,并用它来更新两个状态? –
我不一定要输入是相同的,但状态是完全不同的(如一个字段状态和多字段其他)。能够在第一个状态中更新第二个状态会很好,但不是主要目的。实际上,我想知道是否可以在同一应用程序中更新完全不同的状态(通过不同的更新功能)?它对你更清楚吗? – wipman
我这么认为。国家是孤立的,你不能在不同的'mapWithState'函数内在它们之间进行交互。你可以做的就是将这些状态链接在一起,并将它们作为值传递给下一个'mapWithState',但我不认为这就是你想要做的。 –