Transformation转换算子(基础篇三)
目录
3.2 富函数类(Rich Function Classes)
三、转换算子(Transformation)
数据源读入数据之后,我们就可以使用各种转换算子,将一个或多个 DataStream 转换为新的 DataStream,如图所示。一个Flink程序的核心,其实就是所有的转换操作,它们决定了处理的业务逻辑。
1.基本转换算子
1.1 映射(Map)
map算子接收一个函数作为参数,并把这个函数应用于DataStream的每个元素,最后将函数的返回结果作为结果DataStream中对应元素的值,即将DataStream的每个元素转换成新的元素。
1.2 过滤(filter)
filter
转换操作,顾名思义是对数据流执行一个过滤,通过一个布尔条件表达式设置过滤条件,对于每一个流内元素进行判断,若为 true 则元素正常输出,若为 false 则元素被过滤掉。
1.3 扁平映射(flatmap)
flatMap 操作又称为扁平映射,主要是将数据流中的整体(一般是集合类型)拆分成一个一个的个体使用。消费一个元素,可以产生 0 到多个元素。flatMap 可以认为是“扁平化”(flatten)和“映射”(map)两步操作的结合,也就是先按照某种规则对数据进行打散拆分,再对拆分后的元素做转换处理
1.4基本转换算子的例子
代码如下:
import org.apache.flink.streaming.api.scala._
object Practice_of_Simple_Operators {
def main(args: Array[String]): Unit = {
val env = StreamExecutionEnvironment.getExecutionEnvironment
env.setParallelism(1) //设置并行度为1
//常见的简单算子 有:map、flatmap、filter
//map
//从集合中获取不同数据类型数据
val dataStream1 = env.fromCollection(List(1,2,3))
//对每一个数 都乘以2
val resultStream1 = dataStream1.map(data => data * 2)
resultStream1.print("resultStream1")
//flatmap
val dataStream2 = env.fromCollection(List("hello word","hello flink","hello spark"))
val resultStream2 = dataStream2.flatMap(_.split(" "))
resultStream2.print("resultStream2")
//filter
val resultStream3 = dataStream1.filter(_%2==0)
resultStream3.print("resultStream3")
env.execute("Stream Transform")//启动flink作业
}
}
运行结果:
2.聚合算子(Aggregation)
-
直观上看,基本转换算子确实是在“转换”——因为它们都是基于当前数据,去做了处理和输出。