union,connect,Iterate,project
union算子是把多个task的算子合并成一个算子,(注意这多个算子的类型是要一致的)
DataStream* → DataStream ,下图是语法格式
dataStream.union(otherStream1, otherStream2, ...);
connect算子也是合并算子不过和union不一样。它只是外面包了一层,内部还是隔离开的。这要合并的俩个算子的数据类型是可以完全不一致的。要操作这个connectedStream一般有comap和coflatmap俩种方式。
map和flatmap算子是重写一种逻辑就可以了,comap和coflatmap是要分别对俩个合并算子重写运算逻辑的。
connectedStream算子是不能使用sink操作的,所以它只是一种中间步骤的数据处理。它主要是使用在俩个之间的状态共享这种场景下使用
DataStream,DataStream → ConnectedStream
Iterate算子是执行迭代计算使用的,下面是典型的一段iterator算子使用代码
1,iterate()开启循环
2.执行循环内的操作
3.一般用用filter来产生一个feedback判断是否继续循环
4.closewith(feedback) 形成一个循环块
5.一般再用一个filter来判断什么时候退出循环。
IterativeStream<Long> iteration = initialStream.iterate();
DataStream<Long> iterationBody = iteration.map (/*do something*/);
DataStream<Long> feedback = iterationBody.filter(new FilterFunction<Long>(){
@Override
public boolean filter(Long value) throws Exception {
return value > 0;
}
});
iteration.closeWith(feedback);
DataStream<Long> output = iterationBody.filter(new FilterFunction<Long>(){
@Override
public boolean filter(Long value) throws Exception {
return value <= 0;
}
});
project 投影算子的
这个算子是用来从元组中抽取子集的,参数是元组中元素的下标