Flink数据流类型之间的转换(WindowedStream、DataStream、KeyedStream、AllWindowStream之间的转换)

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: Flink数据流类型之间的转换(WindowedStream、DataStream、KeyedStream、AllWindowStream之间的转换)

     Flink提供了一些流API,其中包括WindowedStream、DataStream、KeyedStream和AllWindowStream。

🍊WindowedStream是一种特殊的流,其中数据已按时间或数据元素的键进行分组,并且每个分组的数据都在窗口中按时间划分。这意味着,如果你有一个WindowedStream,你可以对每个窗口执行转换,例如聚合或统计。

🍊DataStream是Flink中最基本的流类型,表示一个无界的、有序的数据流。它可以是任何类型的数据,例如数值、字符串或复杂的对象。

🍊KeyedStream是一种特殊的DataStream,其中数据已按照一个键(通常是一个数值或字符串)进行分组。这意味着你可以对每个键执行转换,例如聚合或计数。

🍊AllWindowStream是一种特殊的WindowedStream,其中数据流被分成固定大小的所有窗口。这意味着你可以对整个数据流执行转换,而无需将数据分组。

如下图所示,WindowedStream、DataStream、KeyedStream、AllWindowStream之间的转换

73d8c9be8b2a4960a39693770de0ac9a.png

~下面使用代码做一些简单的转换示例,希望能对你有所帮助

      如,你可以使用keyBy()函数将DataStream转换为KeyedStream。( DataStream -> KeyedStream)

DataStream<String> dataStream = ...;
//DataStream -> KeyedStream
KeyedStream<String, String> keyedStream = dataStream.keyBy(new KeySelector<String, String>() {
    @Override
    public String getKey(String value) throws Exception {
        return value;
    }
});

      要将KeyedStream转换为WindowedStream,你可以使用window()函数。例如,以下代码将每个数据元素的键的流分成5秒的滑动窗口( KeyedStream-> WindowedStream):

KeyedStream<String, String> keyedStream = ...;
//KeyedStream-> WindowedStream
WindowedStream<String, String, TimeWindow> windowedStream = keyedStream.window(SlidingTimeWindows.of(Time.seconds(5)));

      还可以使用windowAll()函数将DataStream转换为AllWindowStream(DataStream-> AllWindowStream)。例如,以下代码将数据流分成10秒的滑动窗口:

DataStream<String> dataStream = ...;
//DataStream-> AllWindowStream
AllWindowStream<String, TimeWindow> allWindowStream = dataStream.windowAll(SlidingTimeWindows.of(Time.seconds(10)));

你可以使用以下代码将WindowedStream转换为DataStream(WindowedStream-> DataStream):

WindowedStream<T> windowedStream = ...;
DataStream<T> dataStream = windowedStream.windowAll(TumblingEventTimeWindows.of(Time.milliseconds(10)));

你可以使用reduce函数将KeyedStream转换为DataStream(KeyedStream-> DataStream)。例如,假设你有一个整数类型的KeyedStream,并希望将其转换为所有键的和的DataStream,你可以使用以下代码:

KeyedStream<Integer, String> keyedStream = ...;
DataStream<Integer> sumStream = keyedStream.reduce(new ReduceFunction<Integer>() {
  public Integer reduce(Integer value1, Integer value2) {
    return value1 + value2;
  }
});

你可以使用以下代码将DataStream转换为WindowedStream(DataStream-> WindowedStream)。这段代码将DataStream转换为带有滑动窗口的KeyedStream,然后使用window函数将其转换为WindowedStream,最后使用WindowFunction将WindowedStream中的数据进行转换。

DataStream<T> dataStream = ...;
WindowedStream<T, K, TimeWindow> windowedStream = dataStream.keyBy(new KeySelector<T, K>() {
  public K getKey(T value) {
    // Return the key for the value
  }
}).window(SlidingEventTimeWindows.of(Time.milliseconds(10), Time.milliseconds(5)))
  .apply(new WindowFunction<T, T, K, TimeWindow>() {
    public void apply(K key, TimeWindow window, Iterable<T> values, Collector<T> out) {
      for (T value : values) {
        out.collect(value);
      }
    }
  });
相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
4月前
|
SQL Java 分布式数据库
Flink CDC HBase字段类型与Flink SQL类型之间的转换
【1月更文挑战第4天】【1月更文挑战第19篇】Flink CDC HBase字段类型与Flink SQL类型之间的转换
65 1
|
6月前
|
Java 流计算
Flink类型与Java基本类型关系映射表
Flink类型与Java基本类型关系映射表
37 0
|
9月前
|
SQL 数据挖掘 HIVE
Flink的窗口类型详解
Flink的窗口类型详解
|
14天前
|
存储 算法 API
Flink DataStream API 批处理能力演进之路
本文由阿里云 Flink 团队郭伟杰老师撰写,旨在向 Flink Batch 社区用户介绍 Flink DataStream API 批处理能力的演进之路。
252 1
Flink DataStream API 批处理能力演进之路
|
18天前
|
Java 大数据 API
[AIGC] Flink入门教程:理解DataStream API(Java版)
[AIGC] Flink入门教程:理解DataStream API(Java版)
|
2月前
|
存储 数据库 流计算
Flink CDC 3.0 对于字符串类型的切片键(sharding key)确实存在一些问题
【2月更文挑战第29天】Flink CDC 3.0 对于字符串类型的切片键(sharding key)确实存在一些问题
18 5
|
3月前
|
Oracle 关系型数据库 数据库
Flink Sink to Oracle 存在字段CLOB类型,如何处理错误”ORA-01461: 仅能绑定要插入LONG的LONG值“
做Flink CDC同步数据过程中,目标是Oracle数据库,其中某个字段较大被设置为CLOB类型,其中会遇到异常,”ORA-01461: 仅能绑定要插入LONG的LONG值“
|
3月前
|
消息中间件 SQL canal
Flink转换问题之DataStream转成table失败如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
3月前
|
SQL 监控 Java
Flink报错问题之Flink sql tinyint类型使用in报错如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
7月前
|
存储 关系型数据库 MySQL
怎么使用 Flink 向 Apache Doris 表中写 Bitmap 类型的数据
怎么使用 Flink 向 Apache Doris 表中写 Bitmap 类型的数据
158 0