快捷搜索: 王者荣耀 脱发

Flink DataStream之min()与minBy(),max()与max之间的区别

Flink DataStream之min()与minBy(),max()与max之间的区别

min():获取的最小值,指定的field是最小,但不是最小的那条记录,后面的示例会清晰的显示。

minBy():获取的最小值,同时也是最小值的那条记录。

max()与maxBy()的区别也是一样。

那么下面来看示例:

public class MinOrMinByOperator {

    public static void main(String[] args) throws Exception {

        StreamExecutionEnvironment sEnv = StreamExecutionEnvironment.getExecutionEnvironment();
        sEnv.setParallelism(1);

        Properties p = new Properties();
        p.setProperty("bootstrap.servers", "localhost:9092");

        DataStreamSource<String> source = sEnv.addSource(new FlinkKafkaConsumer010<String>("student", new SimpleStringSchema(), p));

        source.print();

        WindowedStream<Student, String, TimeWindow> windowedStream = source
                .map(new MapFunction<String, Student>() {
                    @Override
                    public Student map(String value) throws Exception {
                        return new Gson().fromJson(value, Student.class);
                    }
                })
                .keyBy(new KeySelector<Student, String>() {
                    @Override
                    public String getKey(Student value) throws Exception {
                        return value.sid;
                    }
                })
                .timeWindow(Time.minutes(1));

        SingleOutputStreamOperator<Student> min = windowedStream.min("age");
        min.print("min  :");

        SingleOutputStreamOperator<Student> minBy = windowedStream.minBy("age");
        minBy.print("minBy:");

        sEnv.execute("MinOrMinByOperator");
    }
}

模拟几条数据,输出结果如下

经验分享 程序员 微信小程序 职场和发展