提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
基本转换算子
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
- 流的类型必须一样