看完了Flink的datasource、sink,也就把一头一尾给看完了,从数据流入到数据流出,缺少了中间的处理环节。
而flink的大头恰恰是只在这个中间环节,如下图:
source-transform-sink-update.png
中间的处理环节比较复杂,现在也就看了其中一部分,这里先开始讲其中最简单 也最常用的map、flatmap及filter。
map
flink中dataSourceStream和java8中的map很类似,都是用来做转换处理的,看下map的实现:
public SingleOutputStreamOperator map(MapFunction mapper) {
TypeInformation outType = TypeExtractor.getMapReturnTypes((MapFunction)this.clean(mapper), this.getType(), Utils.getCallLocationName(), true);
return this.transform("Map", outType, new StreamMap((MapFunction)this.clean(mapper)));
}
可以看到:
1、返回的是SingleOutputStreamOperator泛型,这是个基础的类型,好多DataStream的方法都返回它,比如map、flapmap、filter、process等
2、最终是调用transform方法来实现的,看下transfrom的实现:
@PublicEvolving
public SingleOutputStreamOperator transform(String operatorName, TypeInformation outTypeInfo, OneInputStreamOperator operator) {
this.transformation.getOutputType();
OneInputTransformation resultTransform = new OneInputTransformation(this.transformation, operatorName, operator, outTypeInfo, this.environment.getParallelism());
SingleOutputStreamOperator returnStream = new SingleOutputStreamOperator(this.environment, resultTransform);
this.getExecutionEnvironment().addOperator(resultTransform);
return returnStream;
}
额,好像还不如不看,直接看怎么用吧!
@Slf4j
p