0
点赞
收藏
分享

微信扫一扫

大数据学习-Flink(算子)

_karen 2022-03-10 阅读 100

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


基本转换算子

map

在这里插入图片描述
数据进来一个处理一个

val streamMap = stream.map { x => x * 2 }

flatMap

来一个数据后应用后将数据打散可以有多个输出,一个输入对应多条输出记录

val streamFlatMap = stream.flatMap {
	x => x.split(" ")
}
eg:
List("a b","c d").flatMap(line => line.split(" "))
结果是 List(a,b,c,d)

Filter

按照指定条件对数据进行过滤
在这里插入图片描述

val streamFilter = stream.filter{
	x => x == 1
}

KeyedStream

KeyBy

基于key的hashcode进行重分区的过程,确定了数据怎么去传输,并没实际的转换过程,严格来说并不算是转换算子,但也有人认为是转换算子。(比较特殊)

在这里插入图片描述
DataStream -------> KeyedStream:逻辑地将一个流拆分成不相交的分区,每个分区包含相同key的元素,在内部以hash的形式实现。

  • 基于key的hash code重分区
  • 同一个key只能在一个分区中处理,一个分区可以有不同的key的数据

多流转换算子

Split

DataStream -------> SplitStream:逻辑上根据某些特征将DataStream拆分成两个或者多个DataStream

在这里插入图片描述
split并不是一个完整的分流操作,只是把一个流中的数据按照逻辑特征区分开来而已

Select

SplitStream --------> DataStream:从一个SplitStream中获取一个或者多个DataStream。
在这里插入图片描述

val splitStream : SplitStream[T] = dataStream.split(
	data => {
	if(data.xx > yy)
		Seq("A")
	else 
		Seq("B")
	})
val AStream : DataStream[T] = splitStream.select("A")
val BStream : DataStream[T] = splitStream.select("B")
val AllStream : DataStream[T] = splitStream.select("A","B")

Connect

DataStream,DataStream ----------> ConnectedStream : 连接两个保持他们类型的数据流,两个数据流connect之后,只是被放入一个流中,内部依然保持各自的数据和形式不发生任何变化,两个流相互独立。(和split一样只是作用相反)

  • 只能两条流进行合并
    在这里插入图片描述

CoMap&CoFlatMap

ConnectedStream --------> DataStream:作用于ConnectedStream上,功能和map和flatmap一样,对ConnectedStreams中的每一个Stream分别进行map和flatmap处理。
在这里插入图片描述

val CStream : DataStream[(String,Double)] = AStream.map(
	data => (data.a,data.b)
)
val connectedStream : ConnectedStream[(String,Double),A] = CStream.connect(AStream)
val resultStream : DataStream[T] = connectedStream.map(
	Cdata => (Cdata.1,Cdata.2,"cccc")
	Adata => (Adata.1,"aa")

Union

DataStream --------> DataStream:对两个或者两个以上的DataStream进行union操作,产生一个包含所有DataStream元素的新DataStream

  • 流的类型必须一样
    在这里插入图片描述
举报

相关推荐

0 条评论