大数据学习之路
不积跬步,无以至千里。不积小流,无以成江海。——荀子
为什么要数据分流
通常数据流中包含多种类型数据,每种类型数据需要进行不同的分析。因此我们不得不对数据进行分流。
传统的方式我们可能需要对数据流进行多次遍历或者复制
,本文学习Flink如何对数据流进行分流处理,这就是文章主角SideOutput
从一个简单例子讲起
下面代码例子,将原始的Integer 数据流 分流为奇数、偶数; 通过getSideOutput 得到两个数据流,一个只包含奇数的数据流,一个只包含偶数的数据流,然后对分流后的数据流进行打印。
Flink SideOutput使用流程
-
1.定义不同分流的OutputTag
OutputTag<Integer> evenTag = new OutputTag<Integer>("even"){};
OutputTag<Integer> oddTag = new OutputTag<Integer>("odd"){};
-
2.根据不同的条件将数据输出到不同的 side output
if(value % 2 == 0){
ctx.output(evenTag,value);
}else {
ctx.output(oddTag,value);
}
-
3.使用 SingleOutputStreamOperator#getSideOutput(OutputTagsideOutputTag)方法获取对应的数据流<