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.现有的开源计算方案,会把流处 ...
随机推荐
- TypeError: unsupported operand type(s) for |=: 'dict' and 'dict'
原因:python3.9 支持对 dict 类型使用 |, 而较老的版本不支持 解决方案 :1. 用更新的 python 2. 把 | 操作替换成 {**d1, **d2} 来源:https://st ...
- .NET CORE 控制台程序在CentOS 7 后台运行指令
1.后台运行服务 >/dev/null & 不输出任何信息 & 记录控制台所有信息 记录错误信息 :/dev/null 2>log & 指令:nohup XXX.d ...
- vue中vue2-google-maps使用谷歌地图的基础操作
小哥我最近使用谷歌地图做了一个项目,于是乎各种坑就扑面而来,未免下次接着踩坑特留下自己的爬坑记录. 首先我是没用过谷歌地图也不知道靠谱不靠谱,于是乎傻傻的入坑了, 1.首先你要是没有vpn(或者fq工 ...
- P2016题解
P2016题解 题目描述 Bob要建立一个古城堡,城堡中的路形成一棵无根树.他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能瞭望到所有的路. 注意,某个士兵在一个结点上时,与该结点相连的所有边将 ...
- element table 表格嵌套
/////////////////////////// 代码如下 <template> <div class="report-forms-page"> & ...
- Java中保留两位小数之format
String.format仅限double类型可用 int类型会报错 double d1 = 6.6666;System.out.println(String.format("%.2f&qu ...
- ENGG1310 P2.1 Intro to CE Computer Systems, Programming & Networking
课程内容笔记,自用,不涉及任何 assignment,exam 答案 Notes for self-use, do not include any assignments or exams H/W & ...
- HCIP-进阶实验05-Eth-Trunk配置部署
HCIP-进阶实验06-Eth-Trunk配置部署 1 实验需求 1.1 实验拓扑 1.2 实验环境说明 无 1.3 实验需求 本实验共采用3台三层交换机.1台路由器.认真分析实验需求,明确每步考查的 ...
- Selenium私房菜系列6 -- 深入了解Selenium RC工作原理(1)【QQ】
前一篇已经比较详细讲述了如何使用Selenium RC进行Web测试,但到底Selenium RC是什么?或者它由哪几部分组成呢?? 一.Selenium RC的组成: 关于这个问题,我拿了官网上的一 ...
- OpenSSL测试-SM3
OpenSSL测试-SM3 1.使用OpenSSL的命令计算你的8位学号的摘要值(SM3),提交截图. 运行结果 2.使用OpenSSL编程对计算"你的8位学号"SM3摘要值,提交 ...


























