flink dataStream count

背景:

批(有界流)模式下,需要统计处理总数据条数

如果使用 DataSetApi,可通过.count()直接获取:

本文主要描述DataStream如何获取总条数

思路:

完整Demo

    @SneakyThrows
    public static void main(String[] args) {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        // 设置为批模式
        env.setRuntimeMode(RuntimeExecutionMode.BATCH);
        // BatchSource 为类名称,a.text 位于 resource 目录下
        URL resource = BatchSource.class.getResource("/a.txt");
        DataStreamSource<String> streamSource = env.readTextFile(resource.getPath());

        SingleOutputStreamOperator<Integer> sumStream = streamSource
                .map((MapFunction<String, Integer>) value -> 1)
                .keyBy((KeySelector<Integer, Integer>) value -> value)
                .sum(0);

        sumStream.addSink(new SinkFunction<Integer>() {
            @Override
            public void invoke(Integer value, Context context) throws Exception {
                // 拿到数据总条数,可以做存储数据库或其他使用
                System.out.println("sum is " + value);
            }
        });
        env.execute();
    }
    // 输出结果:sum is 11
附录:a.txt内容:
a,1631669734,32
b,1631669734,32
c,1631669734,32
a,1631669735,31
b,1631669736,34
a,1631669737,23
a,1631669738,21
a,1631669741,21
a,1631669742,21
a,1631669746,34
a,1631669799,34
posted @ 2021-12-31 17:59  蝎子莱莱②号  阅读(710)  评论(0)    收藏  举报