一、Connect

DataStream,DataStream ->  ConnectedStream,连接两个保持他们类型的数据流,两个数据流被Connect之后,只是被放在了同一个流中,内部依然保持各自的数据和形式

不发生任何变化,两个流相互独立。

import org.apache.flink.streaming.api.scala._

object Connect {
def main(args: Array[String]): Unit = { val env = StreamExecutionEnvironment.getExecutionEnvironment
var stream01 = env.generateSequence(1,10)
val stream = env.readTextFile("test001.txt")
val stream02 = stream.flatMap(item => item.split(" ")).filter(item => item.equals("hadoop"))
val streamConnect: ConnectedStreams[Long, String] = stream01.connect(stream02)
//两个流各自处理各自的,互不干扰
val stream03: DataStream[Any] = streamConnect.map(item => item * 2, item => (item,1L)) stream03.print()
env.execute("Connect")
}
}

二、CoMap,CoFlatMap

ConnectedStreams  ->  DataStream:作用于ConnectedStream上,功能与map和flatMap一样,对ConnectedStram中的每一个Stream分别进行map和flatMap

三、Split

import org.apache.flink.streaming.api.scala._

object Split {
def main(args: Array[String]): Unit = { val env = StreamExecutionEnvironment.getExecutionEnvironment
val stream: DataStream[String] = env.readTextFile("test001.txt").flatMap(item => item.split(" "))
val streamSplit: SplitStream[String] = stream.split(
word =>
("hadoop".equals(word) match {
case true => List("hadoop") //值等于hadoop的流加入到一个List中
case false => List("other")//值不等于hadoop的流加入到一个List中
})
)
//取出属于各自部分的流
val value01: DataStream[String] = streamSplit.select("hadoop")
val value02: DataStream[String] = streamSplit.select("other") value01.print()
value02.print() env.execute("Split Job") } }

四、Union

DataStream -> DataStream:对两个或者两个以上的DataStream进行union操作,产生一个包含所有DataStream元素的新的DataStream。

注意:如果你将一个DataStream跟它自己做union操作,在新的DataStream中,你将看到每一个元素都出现两次。

五、KeyBy(比较重要)

DataStream -> KeyedStream:输入必须是Tuple类型,逻辑地将一个流拆分成不相交的分区,每个分区包含具有相同key的元素,在内部以hash的形式实现的。

把所有相同key的数据聚合在一起

import org.apache.flink.api.java.tuple.Tuple
import org.apache.flink.streaming.api.scala._ object KeyBy {
def main(args: Array[String]): Unit = {
val env = StreamExecutionEnvironment.getExecutionEnvironment
val stream: DataStream[String] = env.readTextFile("test001.txt").flatMap(item => item.split(" "))
//将相同key数据进行聚合
//同一个key的数据都划分到同一个分区中
val streamKeyBy: KeyedStream[(String, Int), Tuple] = stream.map(item => (item,1)).keyBy(0) streamKeyBy.print()
env.execute("KeyBy Job") }
}

六、Reduce

KeyedStream -> DataStream,一个分组数据流的聚合操作,合并当前的元素和上次聚合的结果,产生一个新的值,返回的流中包含每一次聚合的结果,

而不是只返回最后一次聚合的最终结果。

数据流如何在两个 transformation 组件中传输的?

一对一流(=spark窄依赖):(比如source=>map过程)保持元素分区和排序

redistributing流(=spark宽依赖):(map=>keyBy/window 之间,以及keyBy/window与sink之间)改变了流分区。

每一个算子任务根据所选的转换,向不同的目标子任务发送数据。

比如:keyBy,根据key的hash值重新分区、broadcast、rebalance(类似shuffle过程)。在一次 redistributing交换中,元素间排序,只针对发送方

的partition和接收partition方。最终到sink端的排序是不确定的。

Flink中的算子操作的更多相关文章

  1. Flink学习(二)Flink中的时间

    摘自Apache Flink官网 最早的streaming 架构是storm的lambda架构 分为三个layer batch layer serving layer speed layer 一.在s ...

  2. Flink中案例学习--State与CheckPoint理解

    1.State概念理解 在Flink中,按照基本类型,对State做了以下两类的划分:Keyed State, Operator State. Keyed State:和Key有关的状态类型,它只能被 ...

  3. Flink中API使用详细范例--window

    Flink Window机制范例实录: 什么是Window?有哪些用途? 1.window又可以分为基于时间(Time-based)的window 2.基于数量(Count-based)的window ...

  4. 如何在 Apache Flink 中使用 Python API?

    本文根据 Apache Flink 系列直播课程整理而成,由 Apache Flink PMC,阿里巴巴高级技术专家 孙金城 分享.重点为大家介绍 Flink Python API 的现状及未来规划, ...

  5. 老板让阿粉学习 flink 中的 Watermark,现在他出教程了

    1 前言 在时间 Time 那一篇中,介绍了三种时间概念 Event.Ingestin 和 Process, 其中还简单介绍了乱序 Event Time 事件和它的解决方案 Watermark 水位线 ...

  6. Flink中的window、watermark和ProcessFunction

    一.Flink中的window 1,window简述  window 是一种切割无限数据为有限块进行处理的手段.Window 是无限数据流处理的核心,Window 将一个无限的 stream 拆分成有 ...

  7. Flink 中极其重要的 Time 与 Window 详细解析(深度好文,建议收藏)

    前言 Flink 是流式的.实时的 计算引擎 上面一句话就有两个概念,一个是流式,一个是实时. 流式:就是数据源源不断的流进来,也就是数据没有边界,但是我们计算的时候必须在一个有边界的范围内进行,所以 ...

  8. 理解Flink中的Task和SUBTASK

    1.概念 Task(任务):Task是一个阶段多个功能相同的subTask 的集合,类似于Spark中的TaskSet. subTask(子任务):subTask是Flink中任务最小执行单元,是一个 ...

  9. Flink的异步算子的原理及使用

    1.简介 Flink的特点是高吞吐低延迟.但是Flink中的某环节的数据处理逻辑需要和外部系统交互,调用耗时不可控会显著降低集群性能.这时候就可能需要使用异步算子让耗时操作不需要等待结果返回就可以继续 ...

随机推荐

  1. 使用xampp在本地环境配置虚拟域名

    最近在学习ThinkPHP5.1.手册里面提到"实际部署中,应该是绑定域名访问到public目录,确保其它目录不在WEB目录下面."所以把使用xampp在本地配置虚拟域名的过程记录 ...

  2. Spring事务管理中的配置文件(三)

    在开发中,遇到了sql语句报错,但是并没有回滚的情况. 经过几天的排查,终于找到了事务没有回滚的原因. 原来的项目用的是informix的数据库,原来针对事务回滚的机制都是好用的.我本地用的是mysq ...

  3. 前端基础div(六)

    实例 文档中的一个部分会显示为绿色: <div style="color:#00FF00"> <h3>This is a header</h3> ...

  4. [POI2008]PER

    很有思维的一道题 这个题的题面非常简单,出题人很友好,没有搞什么奇怪的背景,(卡农(P3214)的作者看看人家),所以理解题面就是: 一句话题意: 给定一个长度为 \(n\) 的数列,求这个数列是在其 ...

  5. 解决proto文件生成pb文件时提示(e.g."message")的问题

    原因:格式不支持 解决办法:去下个notepad,打开方式选择notepad,文件属性的只读取消掉 打开后会发现最下面显示了文件的格式是unix,utf-8 右键红框处,选择转换为windows格式, ...

  6. ts踩坑笔记

    1.react中 this.el 报错 Property 'el' does not exist on type,添加el: any; 2.使用window.xx编译总是报错,用下面方法解决 let ...

  7. Drupal Drupalgeddon 2 远程代码执行漏洞(CVE-2018-7600)

    影响版本 Drupal 6.x,7.x,8.x Drupal 是一款用量庞大的CMS,其6/7/8版本的Form API中存在一处远程代码执行漏洞 脚本检测

  8. RTC为何这么火?

    国内疫情已经接近尾声,有疫情的原因孵化的音视频互动类 App数量出现井喷式增长,通讯场景被资本关注,市场持续走高.在线教育.娱乐社交.直播带货等领域逆势增长,也带动了开发者们对于 IM 和RTC能力的 ...

  9. IDEA使用Tomcat时控制台乱码的解决方案>从零开始学JAVA系列

    IDEA使用Tomcat时控制台乱码的解决方案 解决方案1,修改启动时虚拟机参数 解决方案2,修改idea的设置 解决方案3,修改idea配置文件 在最后添加一行 '-Dfile.encoding=U ...

  10. IDEA输出乱码“淇℃伅”

    尝试过在IDEA中tomcat的vmoptions中加入代码 -Dfile.encoding=GBK 没什么用 最后找到了这个方法 参考链接 ①在Tomcat文件夹下找到conf ②找到logging ...