我正在使用ApacheFlinkStreamingAPI来处理一个数据文件,我只想得到最后一个窗口的结果。有办法吗?如果不可能,我想我可以过滤结果元组中第一个字段的最大值(long值)。
SingleOutputStreamOperator<Tuple12<Long, String, String, Integer, String, Integer, String, Integer, String, Integer, String, Integer>> top5SlidingEventTimeWindowsFiltered = top5SlidingEventTimeWindows.filter(new FilterFunction<Tuple12<Long,String,String,Integer,String,Integer,String,Integer,String,Integer,String,Integer>>() {
public boolean filter(
Tuple12<Long, String, String, Integer, String, Integer, String, Integer, String, Integer, String, Integer> value)
throws Exception {
…
}
});
在上面的过滤转换中,它将按照元组第一个字段的最大值进行过滤。有可能吗?
1条答案
按热度按时间afdcj2ne1#
使用datastream api,当您使用来自有限源(如文件)的数据时,当源到达其输入的末尾时,它会发送一个值为max\u watermark的水印。您可以使用它来检测作业是否完成。
所以像你这样的案子,你可以
ProcessFunction
在windows之后,让它不断地以状态存储到目前为止收到的最新结果。为max\u watermark设置一个计时器,当它到达时,使用它的状态来生成所需的结果。这将是一个
KeyedProcessFunction
,否则就不能使用计时器。如果流没有键控,那么无论如何都必须对其进行键控——只要按一个常量进行键控即可,前提是您不介意并行度为1。