在带水印的append模式下使用flatmapgroupwithstate的结构化流媒体

xlpyo6sf  于 2021-05-27  发布在  Spark
关注(0)|答案(0)|浏览(287)

使用时 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中,我在每个触发器中发出结果。如果使用附加输出模式,这两种模式有何不同?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题