千家信息网

如何用Flink Apply对窗口内的数据流进行处理

发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,这篇文章主要讲解了"如何用Flink Apply对窗口内的数据流进行处理",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何用Flink Apply对窗
千家信息网最后更新 2025年01月24日如何用Flink Apply对窗口内的数据流进行处理

这篇文章主要讲解了"如何用Flink Apply对窗口内的数据流进行处理",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何用Flink Apply对窗口内的数据流进行处理"吧!

Apply算子:对窗口内的数据流进行处理

示例环境

java.version: 1.8.xflink.version: 1.11.1

示例数据源 (项目码云下载)

Flink 系例 之 搭建开发环境与数据

Apply.java

import com.flink.examples.DataSource;import org.apache.flink.api.java.functions.KeySelector;import org.apache.flink.api.java.tuple.Tuple3;import org.apache.flink.streaming.api.datastream.DataStream;import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;import org.apache.flink.streaming.api.functions.windowing.WindowFunction;import org.apache.flink.streaming.api.windowing.windows.GlobalWindow;import org.apache.flink.util.Collector;import java.util.Iterator;import java.util.List;/** * @Description Apply方法:对窗口内的数据流进行处理 */public class Apply {    /**     * 遍历集合,分别打印不同性别的总人数与年龄之和     * @param args     * @throws Exception     */    public static void main(String[] args) throws Exception {        final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();        List> tuple3List = DataSource.getTuple3ToList();        DataStream dataStream = env.fromCollection(tuple3List)                .keyBy((KeySelector, String>) k -> k.f1)                //按数量窗口滚动,每3个输入窗口数据流,计算一次                .countWindow(3)                //只能基于Windowed窗口Stream进行调用                .apply(                        //WindowFunction                        new WindowFunction, String, String, GlobalWindow>() {                            /**                             * 处理窗口数据集合                             * @param s         从keyBy里返回的key值                             * @param window    窗口类型                             * @param input     从窗口获取的所有分区数据流                             * @param out       输出数据流对象                             * @throws Exception                             */                            @Override                            public void apply(String s, GlobalWindow window, Iterable> input, Collector out) throws Exception {                                Iterator> iterator = input.iterator();                                int total = 0;                                int i = 0;                                while (iterator.hasNext()){                                    Tuple3 tuple3 = iterator.next();                                    total += tuple3.f2;                                    i ++ ;                                }                                out.collect(s + "共:"+i+"人,累加总年龄:" + total);                            }                        });        dataStream.print();        env.execute("flink Filter job");    }}

打印结果

4> girl共:3人,累加总年龄:742> man共:3人,累加总年龄:79

感谢各位的阅读,以上就是"如何用Flink Apply对窗口内的数据流进行处理"的内容了,经过本文的学习后,相信大家对如何用Flink Apply对窗口内的数据流进行处理这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

0