当前位置: 首页 > news >正文

Flink转换算子

Apache Flink 是一个用于处理无界和有界数据的开源流处理框架。在 Flink 中,转换(Transformation)是数据流处理的核心组件之一,它们定义了如何从输入数据集生成输出数据集。以下是 Flink 中一些常见的转换算子:

  1. Map: 将每个元素转换为另一个元素。通常用于一对一的数据转换

    DataStream<Integer> input = ...;
    DataStream<Integer> result = input.map(new MapFunction<Integer, Integer>() {@Overridepublic Integer map(Integer value) throws Exception {return value * 2;}
    });
  2. FlatMap: 类似于 Map,但是可以产生多个输出元素

    DataStream<String> input = ...;
    DataStream<String> result = input.flatMap(new FlatMapFunction<String, String>() {@Overridepublic void flatMap(String value, Collector<String> out) throws Exception {for (String word : value.split(" ")) {out.collect(word);}}
    });
  3. Filter: 过滤掉不符合条件的元素。

    DataStream<Integer> input = ...;
    DataStream<Integer> result = input.filter(new FilterFunction<Integer>() {@Overridepublic boolean filter(Integer value) throws Exception {return value > 5;}
    });
  4. KeyBy: 对数据流进行分组,以便后续操作(如窗口操作)能够按特定键处理数据。

    DataStream<Tuple2<String, Integer>> input = ...;
    KeyedStream<Tuple2<String, Integer>, String> keyed = input.keyBy(0);
  5. Reduce: 在每个分组内聚合元素,可以是滚动聚合或窗口内的聚合。

    DataStream<Integer> input = ...;
    DataStream<Integer> result = input.reduce(new ReduceFunction<Integer>() {@Overridepublic Integer reduce(Integer value1, Integer value2) throws Exception {return value1 + value2;}
    });
  6. Window: 定义窗口以对无界流中的数据进行分批处理。

    DataStream<Integer> input = ...;
    DataStream<Integer> result = input.keyBy((key) -> key).timeWindow(Time.seconds(5)).reduce(new ReduceFunction<Integer>() {@Overridepublic Integer reduce(Integer value1, Integer value2) throws Exception {return value1 + value2;}});
  7. Union: 合并两个或更多数据流。

    DataStream<Integer> stream1 = ...;
    DataStream<Integer> stream2 = ...;
    DataStream<Integer> result = stream1.union(stream2);
  8. Connect: 连接两个不同类型的流,但不会将它们合并成一个流。

    DataStream<Integer> stream1 = ...;
    DataStream<String> stream2 = ...;
    ConnectedStreams<Integer, String> connectedStreams = stream1.connect(stream2);
  9. Broadcast: 广播一个数据流到所有任务实例中。

    DataStream<Integer> input = ...;
    BroadcastStream<Integer> broadcastStream = input.broadcast();

这些只是 Flink 提供的一些基本转换算子。Flink 还支持更复杂的转换,例如通过 ProcessFunction 实现自定义逻辑,以及与其他外部系统的集成等高级特性。


  1. Map

    • 作用:将每个元素转换为另一个元素。
    • 示例:将每个整数乘以2。
    • 输入1, 2, 3, 4, 5
    • 输出2, 4, 6, 8, 10
  2. FlatMap

    • 作用:将每个元素转换为零个、一个或多个元素。
    • 示例:将每个字符串拆分成单词。
    • 输入"hello world", "flink is great"
    • 输出"hello", "world", "flink", "is", "great"
  3. Filter

    • 作用:过滤掉不符合条件的元素。
    • 示例:过滤出大于5的整数。
    • 输入1, 2, 3, 4, 5, 6, 7, 8, 9, 10
    • 输出6, 7, 8, 9, 10
  4. KeyBy

    • 作用:根据指定的键对数据流进行分组,以便后续操作(如窗口操作)能够按特定键处理数据。
    • 示例按元组的第一个元素分组
    • 输入(a, 1), (b, 2), (a, 3), (b, 4)
    • 输出:分组后的数据流,按第一个元素分组。
  5. Reduce

    • 作用:在每个分组内聚合元素,可以是滚动聚合或窗口内的聚合。
    • 示例:在每个分组内将整数相加
    • 输入(a, 1), (b, 2), (a, 3), (b, 4)
    • 输出(a, 4), (b, 6)
  6. Window

    • 作用:定义窗口以对无界流中的数据进行分批处理。
    • 示例:定义一个5秒的时间窗口,在每个窗口内将整数相加。
    • 输入1, 2, 3, 4, 5, 6, 7, 8, 9, 10
    • 输出:窗口内的聚合结果,例如 15, 25, 35, ...
  7. Union

    • 作用:合并两个或更多数据流。
    • 示例:合并两个包含整数的数据流。
    • 输入stream1: 1, 2, 3stream2: 4, 5, 6
    • 输出1, 2, 3, 4, 5, 6
  8. Connect

    • 作用:连接两个不同类型的流,但不会将它们合并成一个流。
    • 示例:连接一个整数流和一个字符串流。
    • 输入stream1: 1, 2, 3stream2: "a", "b", "c"
    • 输出ConnectedStreams<Integer, String>
  9. Broadcast

    • 作用:广播一个数据流到所有任务实例中。
    • 示例:广播一个包含配置参数的数据流。
    • 输入1, 2, 3
    • 输出:每个任务实例都收到 1, 2, 3
http://www.lryc.cn/news/481041.html

相关文章:

  • ThinkBook 14+ 2024 Ubuntu 触控板失效 驱动缺失问题解决
  • 【青牛科技】应用方案 | D75xx-150mA三端稳压器
  • WPF之iconfont(字体图标)使用
  • 08、Java学习-面向对象中级:
  • springboot集成onlyoffice(部署+开发)
  • LabVIEW编程基础教学(二)--数据类型
  • 「Mac畅玩鸿蒙与硬件29」UI互动应用篇6 - 多选问卷小应用
  • Flutter中文字体设置指南:打造个性化的应用体验
  • git下载慢下载不了?Git国内国外下载地址镜像,git安装视频教程
  • 安卓属性动画插值器(Interpolator)详解
  • OSPF总结
  • Spring Boot驱动的多维分类知识管理系统
  • CSS教程(七)- 背景
  • PNG图片批量压缩exe工具+功能纯净+不改变原始尺寸
  • 【双十一特惠】腾讯云省钱攻略:如何智取云计算资源
  • 爬虫学习8
  • 双指针算法的妙用:提高代码效率的秘密(2)
  • 笔记--(网络3)、交换机、VLAN
  • 昇思大模型平台打卡体验活动:基于MindSpore实现GPT1影评分类
  • 如何调整pdf的页面尺寸
  • IDA*算法 Power Calculus————poj 3134
  • 重磅!CoRL 2024顶刊会议 清华大学高阳研究组发布“基于大模型先验知识的强化学习”
  • 泷羽sec学习打卡-Windows基础命令
  • RTC精度及校准
  • jQuery案例
  • 常见 HTTP 状态码分类和解释及服务端向前端返回响应时的最完整格式
  • MySQL系列之如何在Linux只安装客户端
  • 内核设备树,你真的了解吗?
  • MySQL:客户端工具创建数据库
  • Linux笔记之pandoc实现各种文档格式间的相互转换