Flink数据流类型之间的转换(WindowedStream、DataStream、KeyedStream、AllWindowStream之间的转换)
创始人
2024-05-07 00:00:08
0

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

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

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

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

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

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

在这里插入图片描述

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

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

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

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

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

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

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

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

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

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

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

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

DataStream dataStream = ...;
WindowedStream windowedStream = dataStream.keyBy(new KeySelector() {public K getKey(T value) {// Return the key for the value}
}).window(SlidingEventTimeWindows.of(Time.milliseconds(10), Time.milliseconds(5))).apply(new WindowFunction() {public void apply(K key, TimeWindow window, Iterable values, Collector out) {for (T value : values) {out.collect(value);}}});

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...