Flink Application Development DataStream API Operators Overview-- Flink应用程序开发DataStream API操作符概览
翻译原文- Application Development DataStream API Operators
概览
操作符将一个或多个DataStream转换为新的DataStream。程序可以将多种转换组合成复杂的数据流拓扑。
本节对基本转换,应用这些转换后的有效物理分区进行描述以及对Flink操作符链的见解。
DataStream转换
原文DataStream Transformations。
Java代码
| 转换 | 描述 | 
|---|---|
| Map       DataStream → DataStream  | 
取一个元素并产生一个元素。一个映射函数的例子,将输入流的值加倍:![]()  | 
| FlatMap       DataStream → DataStream  | 
取一个元素并产生零个,一个或多个元素。flatmap函数可将句子拆分为单词:。![]()  | 
| Filter DataStream → DataStream  | 
为每个元素执行一个布尔函数,函数返回true时保留元素。过滤出零值的filter例子:![]()  | 
| KeyBy  DataStream → KeyedStream  | 
从逻辑上将流划分为不相交的分区。所有具有相同键的记录都分配给相同的分区。在内部,keyBy()是通过哈希分区实现的。有多种指定keys的方法。  此转换返回一个KeyedStream,除其他事项外,还需要使用keyed state。   注意:在以下情况下,类型不能为键: 1. 类型是POJO类型,但不覆盖hashCode()方法,而是依赖于Object.hashCode()的默认实现。 2. 它是任何类型的数组。  | 
| Reduce   KeyedStream → DataStream  | 
在keyed数据流上进行“滚动” reduce。将当前元素与最后一个reduce的value合并,并发出新值。 一个创建局部求和流的reduce函数例子: ![]()  | 
| Aggregations  KeyedStream → DataStream  | 
在一个keyed数据流上滚动聚合。min和minBy之间的区别在于min返回最小值,而minBy返回在此字段中具有最小值的元素(max和maxBy相同)。 ![]()  | 
| Window   KeyedStream → WindowedStream  | 
可以在已经分区的KeyedStreams上定义Windows。Windows根据某些特征(例如,最近5秒钟内到达的数据)将每个键中的数据分组。有关Windows的完整说明,请参见Windows。 ![]()  | 
| WindowAll  DataStream → AllWindowedStream  | 
Windows可以在常规DataStreams上定义。Windows根据某些特征(例如,最近5秒钟内到达的数据)将所有流事件分组。有关Windows的完整说明,请参见Windows。 警告:在许多情况下,这是非并行转换。所有记录将被收集在windowAll操作符的一个任务中。 ![]()  | 
| Window Apply  WindowedStream → DataStream AllWindowedStream → DataStream  | 
将一般函数应用于整个窗口。以下是一个手动对窗口元素求和的函数。 注意:如果使用windowAll转换,则需要改用AllWindowFunction。 ![]()  | 
| Window Reduce  WindowedStream → DataStream  | 
将reduce函数应用于窗口,并返回reduced后的值。 ![]()  | 
| Aggregations on windows  WindowedStream → DataStream  | 
聚合窗口的内容。min和minBy之间的区别在于min返回最小值,而minBy返回在此字段中具有最小值的元素(与max和maxBy相同)。 ![]()  | 
| Union  DataStream* → DataStream  | 
两个或多个数据流的并集,以创建一个包含所有流中的所有元素的新流。注意:如果将数据流与其自身合并,则在结果流中每个元素将获得两次。 ![]()  | 
| Window Join  DataStream,DataStream → DataStream  | 
在给定键和一个共同窗口上连接两个数据流。 ![]()  | 
| Interval Join  KeyedStream,KeyedStream → DataStream  | 
在给定的时间间隔上,使用一个共同的key将两个keyed流的两个元素e1和e2连接起来,从而使e1.timestamp + lowerBound <= e2.timestamp <= e1.timestamp + upperBound ![]()  | 
| Window CoGroup   DataStream,DataStream → DataStream  | 
在给定的键和一个共同窗口上将两个数据流组合在一起。![]()  | 
| Connect  DataStream,DataStream → ConnectedStreams  | 
“连接”两个保留其类型的数据流。连接允许两个流之间共享状态。 ![]()  | 
| CoMap, CoFlatMap  ConnectedStreams → DataStream  | 
在连接的数据流上的map和flatMap二者是相似的。(译者:ConnectedStreams转换成一个普通流)  ![]()  | 
| Iterate   DataStream → IterativeStream → DataStream  | 
通过将一个操作符的输出重定向到某个先前的操作符,在流中创建“反馈”循环。这对于定义不断更新模型的算法特别有用。以下代码从流开始,并连续应用迭代主体。大于0的元素将被发送回反馈通道,其余元素将被转发到下游。  ![]()  | 
在元组的数据流上可以进行以下转换:
Java代码
| 转换 | 描述 | 
|---|---|
| Project  DataStream → DataStream  | 
从元组中选择字段的子集 ![]()  | 
物理分区
在转换后Flink还通过以下函数在确切的流分区上进行了低级别控制(如果需要)。
Java代码
| 转换 | 描述 | 
|---|---|
| Custom partitioning  DataStream → DataStream  | 
使用用户定义的分区器为每个元素选择目标任务。 ![]()  | 
| Random partitioning  DataStream → DataStream  | 
根据均匀分布对元素进行随机划分。 ![]()  | 
| Rebalancing (Round-robin partitioning) DataStream → DataStream  | 
分区元素轮循,从而为每个分区创建相等的负载。在存在数据偏斜的情况下对性能优化很有用。![]()  | 
| Rescaling   DataStream → DataStream  | 
将元素轮询地分配到下游操作符的子集。如果您希望拥有pipelines时这很有用,例如,从一个source的每个并行实例散开到几个mappers的子集以分配负载,但又不希望像rebalance()引起全部重新平衡。这仅需要本地数据传输,而不需要通过网络传输数据,这取决于其他配置值,例如TaskManager的slots数。 上游操作发送元素到的下游操作的子集取决于上游操作和下游操作两者的并行度。例如,如果上游操作具有并行度2,而下游操作具有并行度6,则一个上游操作将元素分配给三个下游操作,而另一个上游操作将分配给其他三个下游操作。另一方面,如果上游操作具有并行性6,而下游操作具有并行性2,则3个上游操作将分配给1个下游操作,而另外3个上游操作将分配给其它1个下游操作。 如果不同的并行度不是彼此的倍数,则一个或几个下游操作将具有与上游操作不同的输入数量。 请参见此图,以查看上面示例中的连接模式: ![]() ![]()  | 
| Broadcasting  DataStream → DataStream  | 
将元素广播到每个分区。 ![]()  | 
任务链和资源组
Java代码
链接两个后续的转换意味着将它们共同定位在同一线程内以获得更好的性能。如果可能的话,默认情况下Flink会链接操作符(例如,两个后续的映射转换)。如果需要,API可以对链接进行细粒度的控制:
如果要在整个作业中禁用链接,请使用StreamExecutionEnvironment.disableOperatorChaining()。为了获得更精细的控制,可以使用以下函数。请注意,这些函数只能在DataStream转换后使用,因为它们引用的到先前的转换。例如,您可以使用someStream.map(...).startNewChain(),但不能使用someStream.startNewChain()。
一个资源组是Flink中的一个slot,请参阅 slots。如果需要,您可以手动将操作符隔离在不同的slots中。
| 转换 | 描述 | 
|---|---|
| Start new chain | 从此操作符开始,开始新的链。下面这两个mappers将被链接,并且filter将不会链接到第一个mapper。  ![]()  | 
| Disable chaining | 不链接map操作符  ![]()  | 
| Set slot sharing group | 设置操作符的slot共享组。Flink会将具有相同slot共享组的操作放入同一slot,同时将没有slot共享组的操作保留在其他slot中。这可以用来隔离slot。如果所有输入操作都在同一slot共享组中,则slot共享组将从输入操作继承。默认slot共享组的名称为“ default”,可以通过调用slotSharingGroup(“ default”)将操作显式放入该组中。   ![]()  | 
Flink Application Development DataStream API Operators Overview-- Flink应用程序开发DataStream API操作符概览的更多相关文章
- aaronyang的百度地图API之LBS云与.NET开发 Javascript API 2.0【基本地图的操作】
		
为了更简单的演示,我们创建个.NET的ASP.NET MVC4项目 好了,上面都是后话,POI说白了,就是你的用户的数据,很多数据,不过没关系,因为你的数据如果存在百度的LBS云上,那么大数据你就不用 ...
 - aaronyang的百度地图API之LBS云与.NET开发 Javascript API 2.0【把数据存到LBS云2/2】
		
中国的IT 需要无私分享和贡献的人,一起努力 本篇博客来自地址:http://www.cnblogs.com/AaronYang/p/3672898.html,请支持原创,未经允许不许转载 1.新建一 ...
 - aaronyang的百度地图API之LBS云与.NET开发 Javascript API 2.0【把数据存到LBS云1/2】
		
如何让用户点,我们可以获得经纬度,我们就要先了解下它给我们提供的百度地图的事件 主要有两个操作事件的,绑定(addEventListener)和解绑(removeEventListener) 一些事件 ...
 - 使用Jax-rs 开发RESTfull API 入门
		
使用Jax-rs 开发RESTfull API 入门 本文使用 Jersey 2开发RESTfull API.Jersey 2 是 JAX-RS 接口的参考实现 使用到的工具 Eclipse Neon ...
 - 【翻译】Flink Table Api & SQL —— Overview
		
本文翻译自官网:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/ Flink Table Api & ...
 - 第一个flink application
		
导入maven依赖 需要注意的是,如果使用scala写程序,导入的依赖跟java是不一样的 Maven Dependencies You can add the following dependenc ...
 - 《从0到1学习Flink》—— Mac 上搭建 Flink 1.6.0 环境并构建运行简单程序入门
		
准备工作 1.安装查看 Java 的版本号,推荐使用 Java 8. 安装 Flink 2.在 Mac OS X 上安装 Flink 是非常方便的.推荐通过 homebrew 来安装. brew in ...
 - 「Flink」使用Java lambda表达式实现Flink WordCount
		
本篇我们将使用Java语言来实现Flink的单词统计. 代码开发 环境准备 导入Flink 1.9 pom依赖 <dependencies> <dependency> < ...
 - flink安装及standalone模式启动、idea中项目开发
		
安装 环境 Ubuntu 18 jdk8 flink-1.8.1 安装步骤 安装jdk(略) 下载flink-1.8.1-bin-scala_2.12.tgz,解压到指定目录 wget http:// ...
 - Flink学习之路(一)Flink简介
		
一.什么是Flink? Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,提供支持流处理和批处理两种类型应用的功能. 二.Flink特点 1.现有的开源计算方案,会把流处 ...
 
随机推荐
- 「JOI Open 2022」Giraffes 题解
			
设我们将要给出的观感好的排列为 \(q\),我们希望求出 \(\sum[p_i=q_i]\) 的最大值(这里指不移动的长颈鹿个数). 结论一:当且仅当左右端点有当前区间最大值或者最小值时条件才能成立. ...
 - windows的lib与dll
			
mingw编译出来的动态库的导入库可以直接在vc中直接使用 静态库 lib .a 动态库 dll动态库导入库 lib .dll.a 静态链接库a) 静态链接库的类和函数不需要导出,就能够被其他库调用. ...
 - C++语言程序设计实验一  类与对象
			
Complex.hpp文件源码: #include <iostream> using namespace std; class Complex { public: Complex(floa ...
 - 2021年全国II巻高考作文刚刚认真看了一下发现很经典,用漫画书法的形式告诉做人的道理!!!说说自己的想法
			
我觉得做人就应该做到这三句话: 1.逆风起笔 藏而不露 ---- 懂得在逆境中潜行 2.中锋用笔 不偏不倚 ---- 做人要正直 不要走歪路 3.停滞迂回 缓缓出头 -- 借喻青年人 ...
 - vs2019中添加rdlc的报表设计器
			
在Visual studio 2019中,不会默认安装rdlc的报表设计器,所以需要自行添加. 1. 打开VS2019, 找到扩展-->管理扩展 2. 在扩展管理中,点击"联机&quo ...
 - ORACLE 遇到ORA 03113 数据库连接卡住
			
环境:RAC 双节点 发现两个节点的alert日志中出现大量的 opiodr aborting process unknown ospid (150950) as a result of ORA-60 ...
 - git基础代码获取
			
1.新建文件夹 2.使用命令git init 初始化 3.见你与远程厂库的连接,git remote add origin 远程仓库地址 4.将远程仓库代码拉去到本地,git fetch origin ...
 - consul剔除某个服务
			
curl --request PUT http://ip:端口/v1/agent/service/deregister/服务对应的id地址
 - 第1关—print()函数与转换
			
Print()函数的用法有以下几种:单枪匹马--不带引号.搭配单引号.搭配双引号.搭配三引号,我们逐个见识下吧! 1.无引号 注意,这里的括号一定要用[英文括号],不然会报错 impor ...
 - 人眼对led灯的闪烁识别度:写单片机的时候,小于15ms,我们人眼视为常亮
			
人眼对于每11毫秒闪烁一次约83赫兹基本感觉不到,每15毫秒闪烁一次约66赫兹轻微频闪. 所以写单片机的时候,小于15ms,我们人眼视为常亮
 
			
		


 






















