【Flink-1.17-教程】-【四】Flink DataStream API(5)转换算子(Transformation)【分流】
所谓“分流”
,就是将一条数据流拆分成完全独立的两条、甚至多条流。也就是基于一个 DataStream,定义一些筛选条件,将符合条件的数据拣选出来放到对应的流里。
1)使用 filter 简单实现
其实根据条件筛选数据的需求,本身非常容易实现:只要针对同一条流多次独立调用 .filter() 方法进行筛选,就可以得到拆分之后的流了。
案例需求:读取一个整数数字流,将数据流划分为奇数流和偶数流。
public class SplitByFilterDemo {
public static void main(String[] args) throws Exception {
// StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(new Configuration());
env.setParallelism(1);
DataStreamSource<String> socketDS = env.socketTextStream("hadoop102", 7777);
/**
* TODO 使用filter来实现分流效果
* 缺点: 同一个数据,要被处理两遍(调用两次filter)
*/
SingleOutputStreamOperator<String> even = socketDS.filter(value -> Integer.parseInt(value) % 2 == 0);
SingleOutputStreamOperator<String> odd = socketDS.filter(value -> Integer.parseInt