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

Flink 03 | 数据流基本操作

图片

Flink数据流结构

DataStream 转换

通常我们需要分析的业务数据可能存在如下问题:

  • 数据中包含一些我们不需要的数据

  • 数据格式不方面分析

因此我们需要对原始数据流进行加工,比如过滤、转换等操作才可以进行数据分析。

Flink DataStream 转换主要作用:对输入的数据流(DataStream)经过各种转换操作以生成新的数据流

操作分类

  • 单条记录操作

    • 比如 Map  、 Fliter

  • 基于窗口 (Window)操作

    • 窗口根据某些特征(例如,过去 5 秒内到达的数据)对所有流事件进行分组

  • 合并数据流

    • union 、join、connect 可以将多个DataStream 合并为一个DataStream 进行分析处理

  • 拆分数据流

    • 将数据流拆分为多个数据流分别对每个数据流进行分析

基本操作

操作描述备注
Map将数据流中每个元素转换为新的元素类似 Java 中 stream.map 操作
Filter筛选只保留符合条件的数据类似 Java 中 stream.filter 操作
FlatMap将一个输入"展开"为多个元素
KeyBy将流逻辑划分为不相交的分区。所有具有相同键的记录都分配到同一个分区。
Reduce对具有相同键的元素进行规约操作,如求和、求最大值

使用示例

Map

将数据流中每个元素转换为新的元素

使用场景很多,主要对原始数据进行加工转换,Java 8 中 stream().map 操作相信大家不陌生, Flink中map 操作类似。

以下展示对数据流中数字取绝对值例子。

DataStream<Integer> dataStream = //...
dataStream.map(new MapFunction<Integer, Integer>() {@Overridepublic Integer map(Integer value) throws Exception {return value >=0 ? value : -value;}
});

Filter

筛选出数据流中符合条件的数据,进行分析, 该操作同样与Java 8 中 stream().filter 类型。

以下代码 保留数据流中正数。

dataStream.filter(new FilterFunction<Integer>() {@Overridepublic boolean filter(Integer value) throws Exception {return value > 0;}
});

FlatMap

该操作将一个输入"展开"为多个元素,简单来说一个对象,变成一个List。

典型例子,将句子拆分为单词

dataStream.flatMap(new FlatMapFunction<String, String>() {@Overridepublic void flatMap(String value, Collector<String> out)throws Exception {for(String word: value.split(" ")){out.collect(word);}}
});

Reduce 操作

对具有相同键的元素进行规约操作,如求和、求最大值。单词统计能够很好的展示 Flink 基本操作,包括reduce操作。

数据源进行KeyBy 后, Reduce 操作即 数据流按Key 分组聚合

public class WordCount {  public static void main(String[] args) throws Exception {  // 设置执行环境  final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();  // 从文件中读取文本数据  DataStream<String> text = env.readTextFile("your file");// 使用 flatMap 将文本分割成单词  DataStream<Tuple2<String, Integer>> counts = text.flatMap(new Tokenizer())  // 使用 keyBy 分组,然后使用 reduce 进行聚合  .keyBy(value->value.f0).reduce(new ReduceFunction<Tuple2<String, Integer>>() {  @Override  public Tuple2<String, Integer> reduce(Tuple2<String, Integer> value1, Tuple2<String, Integer> value2) {  return new Tuple2<>(value1.f0, value1.f1 + value2.f1);  }  });  // 打印结果  counts.print();  // 执行程序  env.execute("Flink Word Count Example");  }  // 自定义 Tokenizer 用于分割文本  public static final class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> {  @Override  public void flatMap(String value, Collector<Tuple2<String, Integer>> out) {  // 使用空格分割字符串  for (String word : value.toLowerCase().split("\\s+")) {  if (word.length() > 0) {  out.collect(new Tuple2<>(word, 1));  }  }  }  }  
}

总结

本文介绍了Flink 数据流基本操作Map/Filter/FlatMap/KeyBy/Reduce 的用法以及使用场景,并通过一个完整的例子展示 这些基本操作同时使用,完成数据分析过程。

对于Flink 一些其他高级操作,会持续更新中。

相关文章:

Flink 03 | 数据流基本操作

Flink数据流结构 DataStream 转换 通常我们需要分析的业务数据可能存在如下问题&#xff1a; 数据中包含一些我们不需要的数据 数据格式不方面分析 因此我们需要对原始数据流进行加工&#xff0c;比如过滤、转换等操作才可以进行数据分析。 “ Flink DataStream 转换主要作…...

在 TS 的 class 中,如何防止外部实例化

在 TypeScript&#xff08;TS&#xff09;中&#xff0c;如果你想要防止一个类被外部实例化&#xff0c;你可以采取以下几种策略&#xff1a; 将构造函数设为私有&#xff08;Private Constructor&#xff09;&#xff1a; 通过将类的构造函数设为私有&#xff0c;你可以阻止外…...

HTML详解

HTML 基础HTML 标题HTML 段落HTML 链接HTML 图片HTML 元素HTML 注释HTML 属性HTML 文本格式化HTML 头部HTML cssHTML 表格HTML 列表HTML 自定义列表HTML 区块HTML 表单HTML 框架HTML 颜色HTML 脚本HTML 事件HTML 实体HTML urlHTML5 新元素 新元素 新元素 新元素 新元素 新元素 …...

记录|Modbus-TCP产品使用记录【德克威尔】

目录 前言一、德克威尔1.1 实验图1.2 DECOWELL IO Tester 软件1.3 读写设置1.4 C#进行Modbus-TCP读写 更新时间 前言 参考文章&#xff1a; 使用的第二款Modbus-TCP产品。 一、德克威尔 1.1 实验图 1.2 DECOWELL IO Tester 软件 这也是自带模块配置软件的。下图就是德克威尔的…...

基于深度学习的视频生成

基于深度学习的视频生成是一项极具前景的技术&#xff0c;旨在通过神经网络模型生成逼真的动态视频内容。随着生成对抗网络&#xff08;GANs&#xff09;、自回归模型、变分自编码器&#xff08;VAEs&#xff09;等深度学习模型的发展&#xff0c;视频生成技术已经取得了显著进…...

TB6612电机驱动模块(STM32)

目录 一、介绍 二、模块原理 1.原理图 2.电机驱动原理 三、程序设计 main.c文件 Motor.h文件 Motor.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 TB6612FNG 是东芝半导体公司生产的一款直流电机驱动器件&#xff0c;它具有大电流 MOSFET-H 桥结构&#xff…...

webpack信息泄露

先看看webpack中文网给出的解释 webpack 是一个模块打包器。它的主要目标是将 JavaScript 文件打包在一起,打包后的文件用于在浏览器中使用,但它也能够胜任转换、打包或包裹任何资源。 如果未正确配置&#xff0c;会生成一个.map文件&#xff0c;它包含了原始JavaScript代码的映…...

启动服务并登录MySQL9数据库

【图书推荐】《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;》-CSDN博客 《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) Windows平台下安装与配置MyS…...

微服务_3.微服务保护

文章目录 一、微服务雪崩及解决方法1.1、超时处理1.2、仓壁模式1.3、断路器1.4、限流 二、Sentinel2.1、流量控制2.1.1、普通限流2.1.2、热点参数限流 2.2、线程隔离2.3、熔断降级2.3.1、断路器状态机2.3.2、断路器熔断策略2.3.2.1、慢调用2.3.2.2、异常比例&#xff0c;异常数…...

【设计模式】软件设计原则——依赖倒置合成复用

依赖倒置引出 依赖倒置 定义&#xff1a;高层模块不应该依赖低层模块&#xff0c;二者都应该依赖抽象&#xff1b;抽象不应该依赖细节&#xff0c;细节应该依赖抽象。面向接口编程而不是面向实现编程。 通过抽象使用抽象类、接口让各个类or模块之间独立不影响&#xff0c;实现…...

vue中如何实现组件通信

1. 父子组件通信 1. props和emits 我们最常见的组件通信就是父子组件数据通信。父子组件实现数据通信需要使用props和emit两个api。 在父组件中我们通过props将数据绑定给子组件&#xff0c;在子组件中我们可以通过props对象来收集到父组件传递的数据。 在子组件想要修改的pr…...

C/C++:内存管理

文章目录 前言一、内存分区1. 内存划分情况2. 最大内存计算 二、malloc/calloc/realloc 与 free1. malloc2. calloc3. realloc4. free5. 差异对比6. 失败处理 三、内存分配题目1. 题目2. 内存区域划分 四、C内存管理方式1. new 与 delete2. new/delete操作内置类型3. new和dele…...

jmeter学习(4)提取器

同线程组https://blog.csdn.net/vikeyyyy/article/details/80437530 不同线程组 在JMeter中&#xff0c;正则表达式提取的参数可以跨线程组使用。 通过使用Beanshell后置处理器和属性设置函数&#xff0c;可以将提取的参数设置为全局变量&#xff0c;从而在多个线程组之间共享…...

移动端的每日任务,golang后端数据库应该怎么设计

推荐学习文档 golang应用级os框架&#xff0c;欢迎stargolang应用级os框架使用案例&#xff0c;欢迎star案例&#xff1a;基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识&#xff0c;这里有免费的golang学习笔…...

1、Spring Boot 3.x 集成 Eureka Server/Client

一、前言 基于 Spring Boot 3.x 版本开发&#xff0c;因为 Spring Boot 3.x 暂时没有正式发布&#xff0c;所以很少有 Spring Boot 3.x 开发的项目&#xff0c;自己也很想了踩踩坑&#xff0c;看看 Spring Boot 3.x 与 2.x 有什么区别。自己与记录一下在 Spring Boot 3.x 过程…...

Vue根实例、实例总结

在Vue.js框架中&#xff0c;根实例和实例扮演着至关重要的角色。以下是对Vue根实例和实例的总结&#xff1a; Vue根实例 定义与创建&#xff1a; Vue根实例是Vue.js应用的核心。每个Vue应用都是通过用Vue函数创建一个新的Vue实例开始的&#xff0c;这个实例被称为根实例。根实…...

微服务架构:Spring Cloud的服务注册与发现、配置管理、服务网关、熔断器、分布式追踪

微服务架构是一种将应用程序构建为一组小型、自治的服务的方法&#xff0c;每个服务都运行在其独立的进程中&#xff0c;服务间通过轻量级通信机制&#xff08;通常是HTTP API&#xff09;进行通信。Spring Cloud是一套基于Spring Boot的微服务解决方案&#xff0c;它提供了一系…...

Spring Boot实现的大学生就业市场解决方案

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…...

Ubuntu上安装Git:简单步骤指南

Git是目前世界上最流行的版本控制系统&#xff0c;广泛用于软件开发中。无论你是开发者还是版本控制的新手&#xff0c;Git都是你不可或缺的工具。本文将为你介绍如何在Ubuntu操作系统上安装Git。 什么是Git&#xff1f; Git是一个开源的分布式版本控制系统&#xff0c;由Lin…...

新闻推荐系统:Spring Boot的架构优势

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…...

3步实现BERT模型轻量化部署与性能优化:基于Torch-Pruning的结构化剪枝指南

3步实现BERT模型轻量化部署与性能优化&#xff1a;基于Torch-Pruning的结构化剪枝指南 【免费下载链接】Torch-Pruning [CVPR 2023] Towards Any Structural Pruning; LLMs / Diffusion / Transformers / YOLOv8 / CNNs 项目地址: https://gitcode.com/gh_mirrors/to/Torch-P…...

电话号码定位开源工具实战完全指南:从部署到企业应用

电话号码定位开源工具实战完全指南&#xff1a;从部署到企业应用 【免费下载链接】location-to-phone-number This a project to search a location of a specified phone number, and locate the map to the phone number location. 项目地址: https://gitcode.com/gh_mirro…...

白鲸开源架构师获邀成为 ASF Member

在技术领域&#xff0c;我们常常被那些闪耀的、可见的成果所吸引。今天&#xff0c;这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力&#xff0c;让我们得以一窥未来的轮廓。然而&#xff0c;作为在企业一线构建、部署和维护复杂系统的实践者&#xff0c;我们深知…...

Qwen3-TTS开源大模型效果展示:俄文/葡萄牙文/意大利文等小语种高自然度语音生成

Qwen3-TTS开源大模型效果展示&#xff1a;俄文/葡萄牙文/意大利文等小语种高自然度语音生成 你听过AI用俄语讲普希金的诗吗&#xff1f;或者用意大利语念一段歌剧台词&#xff1f;过去&#xff0c;想让AI生成地道的小语种语音&#xff0c;要么音色机械&#xff0c;要么口音奇怪…...

Phi-3-mini-128k-instruct在边缘计算场景的部署:基于ARM架构的实践

Phi-3-mini-128k-instruct在边缘计算场景的部署&#xff1a;基于ARM架构的实践 想象一下&#xff0c;在一个智能工厂的角落里&#xff0c;一个巴掌大小的设备正在实时分析着产线传感器传回的日志&#xff0c;识别潜在故障&#xff1b;或者在一个农业大棚中&#xff0c;一个低功…...

新手别怕!用Volatility 2.6分析WinXP内存镜像,一步步揪出隐藏的svchost木马

从零开始的内存取证实战&#xff1a;用Volatility 2.6解剖WinXP内存中的svchost木马 当你第一次接触内存取证时&#xff0c;面对黑底白字的命令行界面和陌生的术语&#xff0c;难免会感到无从下手。但别担心&#xff0c;今天我们就用一个真实的WinXP SP2内存镜像案例&#xff0…...

避坑指南:libvirt远程连接配置全解析(SSH/TCP实战演示)

避坑指南&#xff1a;libvirt远程连接配置全解析&#xff08;SSH/TCP实战演示&#xff09; 虚拟化技术在现代数据中心和云计算环境中扮演着核心角色&#xff0c;而libvirt作为开源虚拟化管理工具的事实标准&#xff0c;其远程管理能力直接决定了运维效率。本文将深入剖析libvir…...

用.NET 6+和secs4net快速搭建半导体设备通信主机(附完整代码示例)

基于.NET 6与secs4net构建半导体设备通信主机的实战指南 在半导体制造领域&#xff0c;设备间的高效通信是自动化生产线的核心需求。SECS/GEM协议作为行业标准&#xff0c;为设备与主机系统间的数据交换提供了可靠框架。本文将展示如何利用.NET 6平台和secs4net库快速搭建功能完…...

SinricPro Business SDK:面向量产的ESP32物联网固件开发套件

1. SinricPro Business SDK 概述SinricPro Business SDK 是专为商业化物联网产品设计的嵌入式软件开发套件&#xff0c;其核心定位并非面向 hobbyist 的快速演示工具&#xff0c;而是面向量产级硬件产品的固件基础设施。与社区版 SinricPro SDK 不同&#xff0c;Business SDK 在…...

微信小程序数据绑定与渲染全解析:从入门到精通

微信小程序数据绑定与渲染实战指南&#xff1a;解锁高效开发密码 微信小程序开发中&#xff0c;数据绑定与渲染机制是构建动态界面的核心。不同于传统网页开发&#xff0c;小程序采用独特的双线程架构&#xff0c;数据通信需要特殊处理。本文将深入剖析数据绑定的底层原理&…...