我试图理解一个键控数据流上的“滚动”reduce。我有一个场景,我想忽略一些在特定时间到达的消息。e、 g.第一个事件->中间事件->最后一个事件,我只想捕获第一个和最后一个事件,并想从流中跳过/删除中间事件。重要的是,它应该建立在一些关键的基础上。。在我的情况下,它没有发生时,我申请的关键。
p4rjhz4m1#
滚动减少可能不是你要找的。它将元素作为状态保存。每当接收到新元素时,它应用 ReduceFunction 关于存储和新元素。函数的结果被发出并更新状态。这个操作符没有结束元素的概念,总是有状态并等待下一个元素处理。我认为一个有状态的 FlatMapFunction 或者 ProcessFunction 将是您的用例的正确方法。函数将开始元素存储为state,并等待结束元素到达。一旦接收到它,就发出start和end元素并清除状态。整个程序可以如下所示:
ReduceFunction
FlatMapFunction
ProcessFunction
val stream[Event] = ... val startEnd[(Event, Event)] = stream .keyBy(yourKey) .flatMap(yourStatefulFunction)
1条答案
按热度按时间p4rjhz4m1#
滚动减少可能不是你要找的。它将元素作为状态保存。每当接收到新元素时,它应用
ReduceFunction
关于存储和新元素。函数的结果被发出并更新状态。这个操作符没有结束元素的概念,总是有状态并等待下一个元素处理。我认为一个有状态的
FlatMapFunction
或者ProcessFunction
将是您的用例的正确方法。函数将开始元素存储为state,并等待结束元素到达。一旦接收到它,就发出start和end元素并清除状态。整个程序可以如下所示: