Flink 学习笔记(四)Transformation
算子将一个或多个数据流转换为一个新的数据流
一下是常用的算子 API,不涉及具体的原理和理论。
Map
DataStream → DataStream 接收一个元素输出一个元素
1 | // 将输入的数变为原来的 2 倍 |
FlatMap
DataStream → DataStream 接收一个元素,可以输出0个,1个或多个元素
1 | // 将句子根据空格分割成单词 |
Filter
DataStream → DataStream
输出符合判断条件的结果
1 | // 输出以 “hello” 开头的字符串 |
KeyBy
DataStream → KeyedStream
对数据流进行逻辑上的分区,内部是通过 hash 进行分区的,返回 KeyedStream
1 | dataStream |
Reduce
KeyedStream → DataStream 接收 keyedStream,产生一个新的数据流
1 | // 一个可能不是很恰当的例子 |
Fold
KeyedStream → DataStream 输入也是 keyedStream
1 | // 用在序列 (1,2,3,4,5)上, 产生序列 "start-1", "start-1-2", "start-1-2-3", ... |
Aggregations
KeyedStream → DataStream
有 sum,min(返回最小值), minBy(返回值最小的元素), max, maxBy
Window
KeyedStream → WindowedStream
可以定义在以有分区的 keyedStream 上,可以根据一些特征再对 key 分组
1 | // 时间窗口 |
WindowAll
DataStream → AllWindowedStream
允许对常规数据流进行分组,非并行的数据转换
Window Apply
WindowedStream → DataStream 将某个操作应用于整个窗口
AllWindowedStream → DataStream
Window Reduce
WindowedStream → DataStream 在 window 中应用 reduce
Window Fold
WindowedStream → DataStream 在 window 中应用 fold
Aggregations on windows
WindowedStream → DataStream 在 window 中做聚合操作
Union
DataStream* → DataStream 合并两个或多个数据流,创建一个包含所有流中所有元素的新流。
Window Join
DataStream, DataStream → DataStream 根据 key 将同一 window 的两个流合并成一个流
1 | dataStream.join(otherStream) |
Interval Join
KeyedStream, KeyedStream → DataStream 将给定时间段内的两个 keyedstream 根据同一个 key 合并
Window CoGroup
DataStream, DataStream → DataStream 根据 key 对同一个 window 的普通流进行合并
Connect
DataStream, DataStream → ConnectedStreams
“连接”两个保留其类型的数据流。 连接允许两个流之间共享状态。
1 | DataStream<Integer> someStream = //... |
CoMap, CoFlatMap
ConnectedStreams → DataStream connected 数据流上的 map 和 flatmap
Split
DataStream → SplitStream 按条件将一个数据流分成多个流
1 | SplitStream<Integer> split = someDataStream.split(new OutputSelector<Integer>() { |
Select
SplitStream → DataStream 从上一步的 split 流中选择一个或多个流
1 | DataStream<Integer> even = split.select("even"); |
Iterate
DataStream → IterativeStream → DataStream 通过将一个算子的输出重定向到某个先前的算子,在流中创建“反馈”循环。
Extract Timestamps
DataStream → DataStream 从记录中提取时间戳
Project
DataStream → DataStream 从事件流中选择属性子集,并仅将所选元素发送到下一个处理流
1 | DataStream<Tuple3<Integer, Double, String>> in = // [...] |
- 本文作者: Kelly Liu
- 本文链接: http://tiantianliu2018.github.io/2020/03/26/Flink-学习笔记(四)Transformation/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!