使用时 flatMapGroupWithState
在带有水印的附加模式下,何时将数据写入接收器?根据文件
窗口聚合的输出延迟了withwatermark()中指定的延迟阈值,正如模式语义所示,行只能在完成后(即水印交叉后)添加到结果表中一次。
所以在 flatMapGroupWithState
在append模式下,我是否只在组状态超时后返回数据(即,在水印被交叉后)?我的意思的代码示例-
情景1-
dataset.withWatermark("time", "1 minute")
.groupByKey(row => (row.key)
.flatMapGroupsWithState(OutputMode.Append(), GroupStateTimeout.EventTimeTimeout())(mapFunc)
def mapFunc(key: Int, data: Iterator[Rows], state: GroupState[State]): Iterator = {
var results = Iterator.Empty
if (state.hasTimedOut) {
results = state.get.iterator
state.remove()
} else {
updateState(key, data, state)
}
results
}
场景2-
dataset.withWatermark("time", "1 minute")
.groupByKey(row => (row.key)
.flatMapGroupsWithState(OutputMode.Append(), GroupStateTimeout.EventTimeTimeout())(mapFunc)
def mapFunc(key: Int, data: Iterator[Rows], state: GroupState[State]): Iterator = {
var results = Iterator.Empty
if (state.hasTimedOut) {
results = state.get.iterator
state.remove()
} else {
updateState(key, data, state)
results = state.get.iterator
}
results
}
在场景1中,我只在 GroupState
超时,在场景2中,我在每个触发器中发出结果。如果使用附加输出模式,这两种模式有何不同?
暂无答案!
目前还没有任何答案,快来回答吧!