温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
了解了啊,接下来呢,我们再来介绍一个比较特殊的重分局方式,那就是广播broadcast啊,其实我们知道广播嘛,那就相当于是把一份数据要通知到,同时通知到下游的所有并行子任务。那理论上来讲,这个其实不应该叫做重分区了,它并不是把一份数据,我们想啊,把一份数据重新调整了一下分区啊,分配到了某一个分区上,它现在是一份复制了多份,然后发送到所有的下游并行子任务。所以这种情况呢,有可能会把一个数据进行重复处理啊,所以一般情况下啊,我们在正常的流处里边是不会用这种方式去做转分区的,那只有在特殊情况下,后面我们会讲到使用广播状态构建这个广播流的时候,可能会用到这种方式啊,我们也可以简单的做一个测试。同样还是创建一个scla的object,当前我们就叫做potential broadcast。
01:05
Test。啊,那里边的具体内容的话,这也非常简单啊,我们还是把这一部分直接copy过来。上面改成下划线。然后接下来,哎,那就直接我们做一个broadcast,调用broadcast,然后接下来做一个打印输出。Broadcast同样我们前面还是当前的并行度,原算子是一,后边的并行度是四,所以接下来呢,我们运行一下,看一看得到的效果是什么样子。我们可以看到,现在就是每隔一秒钟,一下子就会输出四条完全相同的数据,而且是12344个并行子任务全部输出一样的结果,这就是所谓的广播啊,其实非常好理解啊,呃,它只是在一些特殊场合下才会去用这种方式。
02:01
啊,既然提到了广播,那另外呢,我们再来介绍一个也是比较特殊的分区方式,就是所谓的全局分区global,这种分区方式呢,可以说跟广播是完全相反,广播是一份要通知到下游的所有人,而全区分区呢,是不管我上游有多少分区,不管当前这个数据是什么样子,全部把它分发到下游的第一个并行子任务上去。也就是说这相当于是把这个所有数据全部分配到一个分区,下游任务的并行度相当于强制的变成了一啊,那所以呢,在实际使用的过程当中呢,一般是不推荐大家直接用这种global分区方式的啊,当然了,只有在非常特殊的情况下啊,我们就要把所有的数据汇集起来的时候,可能才会去用它,所以接下来我们可以在就在这份代码里边啊,我们直接来做一个测试,可以看一眼,比方说这里边同样还是这个strip,我们可以直接去调用一个global,然后去做一个打印。
03:06
Global。然后接下来同样我们还把它的并行度设置为四,我们运行一下,看看跟前面的广播效果有什么不同。我们可以看到global这里每一次都只生成一条数据,而且这个数据永远都在第一个分区上面啊,所以这就是我们所说的这个broadcast和global广播分区和全局分区。这两种方式在实际应用当中都会比较少见啊,只有在特殊场景下才会用到这样的分区方式。
我来说两句