1. map
结构转换
//类似于spark中的map算子,一对一
val streamMap = stream.map { x => x * 2 }
2. flatMap
val stream = env.fromElements("spark flink", "flink scala hadoop")
stream.flatMap(e => {
e.split(" ")
})
3. filter
数据剔除,过滤
//偶数留下,过滤掉奇数
val stream = env.fromElements(1, 2, 3)
stream.filter(_%2 == 0).print()
4. keyBy
DataStream → KeyedStream:逻辑地将一个流拆分成不相交的分区,每个分区包含具有相同key的元素,在内部以hash的形式实现的。
key相同的元素肯定在一个slot里面。
5. 滚动聚合算子(Rolling Aggregation)
这些算子可以针对KeyedStream的每一个支流做聚合
- sum()
- min()
- max()
- minBy()
- maxBy()
val stream = env.fromElements("spark flink", "flink scala hadoop",
"spark flink", "scala flink")
stream
.flatMap(e => {
e.split(" ")
})
.map((_, 1))
.keyBy(0)
.sum(1)
.print()
6. reduce
KeyedStream → DataStream:一个分组数据流的聚合操作,合并当前的元素和上次聚合的结果,产生一个新的值,返回的流中包含每一次聚合的结果,而不是只返回最后一次聚合的最终结果。
val stream = env.fromElements("spark flink", "flink scala hadoop",
"spark flink", "scala flink")
stream
.flatMap(e => {
e.split(" ")
})
.map((_, 1))
.keyBy(0)
.reduce((r1, r2) => (r1._1, r1._2 + r2._2))
.print()
7. connect和Comap
- connect
DataStream,DataStream → ConnectedStreams:连接两个保持他们类型的数据流,两个数据流被Connect之后,只是被放在了一个同一个流中,内部依然保持各自的数据和形式不发生任何变化,两个流相互独立。
- CoMap,CoFlatMap
ConnectedStreams → DataStream:作用于ConnectedStreams上,功能与map和flatMap一样,对ConnectedStreams中的每一个Stream分别进行map和flatMap处理。
8. union
DataStream → DataStream:对两个或者两个以上的DataStream进行union操作,产生一个包含所有DataStream元素的新DataStream。
9. Connect与 Union 区别:
- Union之前两个流的类型必须是一样,Connect可以不一样,在之后的coMap中再去调整成为一样的。
- Connect只能操作两个流,Union可以操作多个。