分区:将数据进行重新分布,传递到不同的流分区去进行下一步处理。
物理分区 分类
物理分区 可以分为6类,分别是:
- 随机分区
- 轮询分区
- rescale分区
- 广播
- 全局分区
- 自定义重分区
具体操作
1、随机分区:对于全部的分区,进行洗牌
//1、随机分区 对于全部的分区 进行洗牌
stream.shuffle().print("随机分区").setParallelism(4);
2、轮询分区:对于全部的分区 进行发牌
//2、轮询分区 对于全部的分区 进行发牌
stream.rebalance().print("轮询分区").setParallelism(4);
3、rescale重缩放分区:对于全部的分区先进行一个划分,然后再 在已经分好的分区中,对数据进行轮询分区,发牌。拿我们这里的例子来说,先将全部分区分成2部分,再针对这两部分进行发牌,奇数在一部分分区中 偶数在一部分分区中。
/*
3、rescale重缩放分区 对于全部的分区先进行一个划分,然后再 在已经分好的分区中,对数据进行轮询分区,发牌
拿我们这里的例子来说,先将全部分区分成2部分,再针对这两部分进行发牌,奇数在一部分分区中 偶数在一部分分区中
*/
env.addSource(new RichParallelSourceFunction<Integer>() {
@Override
public void run(SourceContext<Integer> sourceContext) throws Exception {
for (int i=0;i<8;i++){
//将奇偶数分别发送到0号到1号并行分区
if(i%2==getRuntimeContext().getIndexOfThisSubtask()){
sourceContext.collect(i);
}
}
}
@Override
public void cancel() {
}
}).setParallelism(2)
.rescale()
.pri