flink的批量迭代操作符和while循环有什么区别?

yrdbyhpb  于 2021-06-25  发布在  Flink
关注(0)|答案(1)|浏览(393)

从flink文档中,我知道循环可以用迭代操作符实现。由于flink代码是延迟计算的,所以不可能使用while循环计算终止条件。
但是对于像这样的批量迭代 initial.iterate(10){...} ,我们可以使用while循环来达到同样的效果吗?

var dataset = ...   
while (i < 10) {
    dataset = step(dataset);
}
0h4hbjxa

0h4hbjxa1#

使用内置的批量迭代操作符和使用while循环构造计划的区别在于生成的执行计划。
while循环:

StartDS -> Step1 -> Step2 -> ... -> Step10 -> ResultDS

批量迭代:

StartDS -> IterationHead -> Step -> IterationTail -> ResultDS
               ^                           |
                \-----------(9 times)-----/

根据您正在运行的迭代的数量,批量迭代计划的大小可以大大减小。更小的计划意味着flink需要更少的时间来优化和安排计划。
此外,优化器可以利用有关显式迭代的信息,并将每次迭代中使用的数据集缓存在内存中。

相关问题