Flink的批量迭代运算符和while循环之间有什么区别?

时间:2017-12-20 01:38:14

标签: apache-flink

Flink documentation开始,我知道循环可以用迭代运算符实现。由于Flink代码被延迟评估,因此无法使用while循环评估终止条件。

但对于像initial.iterate(10){...}这样的批量迭代,我们可以使用while循环来实现相同的效果吗?

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

1 个答案:

答案 0 :(得分:1)

使用内置批量迭代运算符和使用while循环构建计划的不同之处在于生成的执行计划。

While Loop:

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

批量迭代:

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

根据您运行的迭代次数,批量迭代计划的大小可以显着缩小。较小的计划意味着Flink需要更少的时间来优化和安排计划。

此外,优化器可以利用有关显式迭代的信息,并在内存中缓存每次迭代中使用的DataSet。