假设这是我的示例流,如下所示:
SingleOutputStreamOperator<Tuple2<String, SampleClass>> sampleStream = previousStream
.keyBy(value -> value.f1.getId())
.window(TumblingProcessingTimeWindows.of(Time.seconds(1)))
SampleClass
有两个字段id
和time
,还有两个getter方法getId()
和getTime
,分别用于获取这两个字段。
目标:现在我想对上面的流执行maxBy
操作,并将time
作为最大化的条件。基本上,我希望窗口前面的元素是最新的。
我如何实现我的目标?maxBy
作用于参数的位置,而不是参数内部的嵌套字段。例如:
.maxBy(positionToMaxBy = 1, first = true)
这里positionToMaxBy
会考虑流参数中的第二个参数,也就是对象。但是我如何让它使用getTime()
方法来代替整个对象呢?
1条答案
按热度按时间gab6jxml1#
一些解决方案:
Tuple2<String, SampleClass>
转换为SampleClass
的窗口之前使用贴图reduce
代替maxBy
SampleClass
上实现Comparable
,并让compareTo
方法只检查时间字段