我想知道是否有可能在整個應用程序中保持完全不同的狀態?例如,第一個狀態的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',但我不認爲這就是你想要做的。 –