Flink Data transformation 算子学习

1、Source:数据源,Flink在流处理和批处理上的source大概有4类:

基于本地集合的source、基于文件的source、基于网络套接字的source、自定义的source。

自定义的source常见的有 Apache kafka、Amazon Kinesis Streams、RabbitMQ、Twitter Streaming API、Apache NiFi 等,当然你也可以

定义自己的source。

2、Transformation:数据转换的各种操作,有 Map/FlatMap/Filter/KeyBy/Reduce/Fold/Aggregations/Window/WindowAll/

Union/Window join/Split/Select/Project等,操作很多,可以将数据转换计算成你想要的数据。

3、Sink:接收器,Flink 将转换计算后的数据发送的地点,你可能需要存储下来,Flink常见的Sink大概有如下几类:

写入文件、打印出来、写入socket、自定义的sink。

自定义的sink常见的有 Apache kafka、RabbitMQ、MySQL、ElasticSearch、Apache Cassandra、Hadoop FileSystem等。

同理你也可以定义自己的Sink。

1、Map 这是最简单的转换之一,其中输入是一个数据流,输出的也是一个数据流。

2、FlatMap 采用一条记录并输出零个,一个或者多个记录。

3、Filter 函数根据条件判断出结果。

4、KeyBy 在逻辑上基于Key对流进行分区。在内部,它使用hash函数对流进行分区。它返回 KeyedDataStream 数据流。

5、Reduce 返回单个的结果值,并且 reduce 操作每处理一个元素总是创建一个新值。

常用的方法有 average,sum,min,max,count 使用 reduce 方法都可以实现。

6、Fold 通过将最后一个文件夹流与当前记录组合来推出 KeyedStream。它会发回数据流。

7、Aggregations

DataStream API 支持各种聚合,例如 min、max、sum等。这些函数可以应用于KeyedStream 以获得Aggregataions聚合。

max和maxBy之间的区别在于 max返回流中的最大值,但 maxBy返回具有最大值的键,min和minBy同理。

8、Window

Window 函数允许按时间或其他条件对现有KeyedStream 进行分组。

9、Union

Union 函数将两个或多个数据流结合在一起。这样就可以并行地组合数据流。如果我们将一个流与自身组合,那么它会输出每个记录两次。

10、Window join

我们可以通过一些 key 将同一个window 的两个数据流 join 起来。

11、Split

此功能根据条件将流拆分为两个或多个流。当您获得混合流并且您可能希望单独处理每个数据流时,可以使用此方法。

12、Select

此功能允许您从拆分流中选择特定流。

13、Project

Project 函数允许您从事件流中选择属性子集,并仅将所选元素发送到下一个处理流。

本文主要介绍了 Flink Data 的常用转换方式:

Map、FlatMap、Filter、KeyBy、Reduce、Fold、Aggregations、Window、

WindowAll、Union、Window Join、Split、Select、Project 等。

并用了点简单的 demo 介绍了如何使用,具体在项目中该如何将数据流转换成我们想要的格式,还需要根据实际情况对待。

Flink Data transformation(转换)的更多相关文章

  1. 《从0到1学习Flink》—— Flink Data transformation(转换)

    前言 在第一篇介绍 Flink 的文章 <<从0到1学习Flink>-- Apache Flink 介绍> 中就说过 Flink 程序的结构 Flink 应用程序结构就是如上图 ...

  2. Flink 从 0 到 1 学习 —— 如何自定义 Data Sink ?

    前言 前篇文章 <从0到1学习Flink>-- Data Sink 介绍 介绍了 Flink Data Sink,也介绍了 Flink 自带的 Sink,那么如何自定义自己的 Sink 呢 ...

  3. Flink 从 0 到 1 学习 —— 如何自定义 Data Source ?

    前言 在 <从0到1学习Flink>-- Data Source 介绍 文章中,我给大家介绍了 Flink Data Source 以及简短的介绍了一下自定义 Data Source,这篇 ...

  4. Flink 从 0 到 1 学习 —— Flink Data transformation(转换)

    toc: true title: Flink 从 0 到 1 学习 -- Flink Data transformation(转换) date: 2018-11-04 tags: Flink 大数据 ...

  5. 《从0到1学习Flink》—— Data Sink 介绍

    前言 再上一篇文章中 <从0到1学习Flink>-- Data Source 介绍 讲解了 Flink Data Source ,那么这里就来讲讲 Flink Data Sink 吧. 首 ...

  6. 《从0到1学习Flink》—— 如何自定义 Data Source ?

    前言 在 <从0到1学习Flink>-- Data Source 介绍 文章中,我给大家介绍了 Flink Data Source 以及简短的介绍了一下自定义 Data Source,这篇 ...

  7. 《从0到1学习Flink》—— Data Source 介绍

    前言 Data Sources 是什么呢?就字面意思其实就可以知道:数据来源. Flink 做为一款流式计算框架,它可用来做批处理,即处理静态的数据集.历史的数据集:也可以用来做流处理,即实时的处理些 ...

  8. 《从0到1学习Flink》—— 如何自定义 Data Sink ?

    前言 前篇文章 <从0到1学习Flink>-- Data Sink 介绍 介绍了 Flink Data Sink,也介绍了 Flink 自带的 Sink,那么如何自定义自己的 Sink 呢 ...

  9. 《从0到1学习Flink》—— Flink 写入数据到 Kafka

    前言 之前文章 <从0到1学习Flink>-- Flink 写入数据到 ElasticSearch 写了如何将 Kafka 中的数据存储到 ElasticSearch 中,里面其实就已经用 ...

随机推荐

  1. 让Angular自定义组件支持form表单验证

    Angular提供了一套非常强大的表单验证库(vue和react都需要第三方库的支持),可以非常方便简单实现web应用程序中的表单验证功能.但是如何让我们自定义的组件也支持验证呢? 我遇到一个需求是封 ...

  2. 如何修改product.product的display_name的显示,解决_rec_name失效的问题

    回顾学习 之前有讲解过display_name是怎么由来的,odoo会去取_rec_name的值,会将_rec_name的值赋值给display_name. class FandxProduct(mo ...

  3. PHP 多进程下载必应壁纸

    手里拿着锤子,看什么都像是钉子 在放假的这几天,断断续续的看了老李关于 PHP 多进程的文章. PHP多进程初探 --- 开篇 PHP多进程初探 --- 孤儿和僵尸 PHP多进程初探 --- 信号 P ...

  4. Gos Log每次查询响应后自动清理临时文件,优化磁盘空间

    客户端清理 logc/controllers/file/file.go 压缩后清理原始文件 //压缩成功后 删除原文件 os.Remove(src) 返回后清理压缩文件 defer func() { ...

  5. Windows7/10 防火墙开放Oracle数据库1521端口

    安装Oracle 12C数据库,在局域网中,允许其他电脑访问,则需要开启防火墙的 1521端口 ==================================================== ...

  6. C语言复习(二)

    引言: 不会将每一个部分都详述,只关注于一些自己认为重要的或常错的,若有不足,还望指出 switch()细节:括号内必须是整型或枚举类型:遇到break才会跳出:case包含的必须是常量 contin ...

  7. Mysql读写锁保姆级图文教程

    摘要:读锁会阻塞写,但是不会阻塞读,而写锁会把杜希俄都阻塞. 本文分享自华为云社区<Mysql保姆级读写锁图文教程丨[绽放吧!数据库]>,作者:Code皮皮虾 . 准备 创建mylock表 ...

  8. 小白学习Vue第五天(v-model实用的地方)

    用法一radio单选项 <!-- 添加name男女选项互斥 --> <label for="male"> <input type="radi ...

  9. Java方法01——什么是方法

    例子 package method;public class Demon02 { //main 方法 public static void main(String[] args) { //实际参数:实 ...

  10. Android招聘市场技术要求越来越高,从事三年开发是否应该考虑转行?

    这是在某论坛看到的一个网友的疑问,他说感觉现在Android 开发这条路越来越难走了.下面是他的分享: 本来已经做好了好几个月找不到工作的准备.不过这两周感觉面试机会还算可以.两周10个面试感觉刚刚好 ...