1、Transform
1.1 map
val streamMap = stream.map { x => x * 2 }
1.2 flatmap
flatMap的函数签名:def flatMap[A,B](as: List[A])(f: A ⇒ List[B]): List[B]
例如: flatMap(List(1,2,3))(i ⇒ List(i,i))
结果是List(1,1,2,2,3,3)
而List("a b", "c d").flatMap(line ⇒ line.split(" "))
结果是List(a, b, c, d)
val streamFlatMap = stream.flatMap{
x => x.split(" ")
}
1.3 filter
val streamFilter = stream.filter{
x => x == 1
}
1.4 keyby
DataStream→ KeyedStream:逻辑地将一个流拆分成不相交的分区,每个分区包含具有相同key的元素,在内部以hash的形式实现的。
val streamKeyby = stream.keyBy(0)
1.5 滚动聚合算子(Rolling Aggregation)
这些算子可以针对KeyedStream的每一个支流做聚合。
sum()
min()
max()
minBy()
maxBy()
1.6 reduce
KeyedStream → DataStream:一个分组数据流的聚合操作,合并当前的元素和上次聚合的结果,产生一个新的值,返回的流中包含每一次聚合的结果,而不是只返回最后一次聚合的最终结果。
val env: StreamExecutionEnvironment =StreamExecutionEnvironment.getExecutionEnvironment
val dataDS: DataStream[String]= env.readTextFile("input/data.txt")
val ds: DataStream[WaterSensor]=dataDS.map(
s=>{
val datas= s.split(",")
WaterSensor(datas(0), datas(1).toLong, datas(2).toDouble)
}
).keyBy(0).reduce(
(s1, s2)=>{
println(s"${s1.vc} <==> ${s2.vc}")
WaterSensor(s1.id, s1.ts, math.max(s1.vc, s2.vc))
}
)
ds.print()
en