在 Spark 中,内存计算有两层含意:
那 Stage 内的流水线式计算形式究竟长啥样呢?在 Spark 中,流水线计算形式指的是:在同一 Stage 外部,一切算子融合为一个函数,Stage的输入结果,由这个函数一次性性作用在输入数据集而发生。
咱们用一张图来直观地解释这一计算形式。
在上方的计算流程中,假设你把流水线看作是内存,每一步操作事先都会生成暂时数据,如图中的 clean 和 slice,这些暂时数据都会缓存在内存里。
但在上方的内存计算中,一切操作步骤如clean、slice、bake,都会被捏合在一同形成一个函数。这个函数一次性性地作用在“带泥土豆”上,间接生成“即食薯片”,在内存中不发生任何两边数据外形。
由于计算的融合只出当初 Stages 外部,而 Shuffle 是切割 Stages 的边界,因此一旦出现Shuffle,内存计算的代码融合就会终止。但是,当咱们对内存计算有了多方位了解,就不会一股脑地只想到用 cache去优化运行的口头功能,而是会更被动地想方法尽量防止 Shuffle,让运行代码中尽或者多的局部融合为一个函数,从而优化计算效率。
© 版权声明