filter-by-max

wnvonmuf  于 2021-06-21  发布在  Flink
关注(0)|答案(1)|浏览(315)

我正在使用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 {
            …

        }
    });

在上面的过滤转换中,它将按照元组第一个字段的最大值进行过滤。有可能吗?

afdcj2ne

afdcj2ne1#

使用datastream api,当您使用来自有限源(如文件)的数据时,当源到达其输入的末尾时,它会发送一个值为max\u watermark的水印。您可以使用它来检测作业是否完成。
所以像你这样的案子,你可以 ProcessFunction 在windows之后,让它不断地以状态存储到目前为止收到的最新结果。为max\u watermark设置一个计时器,当它到达时,使用它的状态来生成所需的结果。
这将是一个 KeyedProcessFunction ,否则就不能使用计时器。如果流没有键控,那么无论如何都必须对其进行键控——只要按一个常量进行键控即可,前提是您不介意并行度为1。

相关问题