分流场景
在生产实践中经常会遇到这样的场景,需把输入源按照需要进行拆分,比如预期把订单流按照金额大小进行拆分,或者把用户访问日志按照访问者的地理位置进行拆分等。面对这样的需求应该如何操作?
分流的方法
针对不同的场景,有以下三种方法进行拆分
Filter分流
Filter方法在之前的文章中(Flink常用的DataSet和DataStream API)讲过。这个算子用来根据用户输入的条件进行过滤,每个元素都会被filter()函数处理,如果filter()函数返回true则保留,否则丢弃。那么用分流的场景,我们可以做多次filter,把我们需要的不同数据生成不同的流。看下面的例子:
public static void main(String[] args) throws Exception {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
//获取数据源
List data = new ArrayList<Tuple3<Integer,Integer,Integer>>();
data.add(new Tuple3<>(0,1,0));
data.add(new Tuple3<>(0,1,1));
data.add(new Tuple3<>(0,2,2));
data.add(new Tuple3<>(0,1,3));
data.add(new Tup