在什么情况下会跳过DAG的阶段?

问题描述 投票:1回答:1

我正在尝试查找在我使用RDD的情况下Spark会跳过阶段的情况。我知道,如果发生洗牌操作,它将跳过阶段。因此,我编写了以下代码,看是否正确:

def main(args: Array[String]): Unit =
{
  val conf = new SparkConf().setMaster("local").setAppName("demo")
  val sc   = new SparkContext(conf)

  val d = sc.parallelize(0 until 1000000).map(i => (i%100000, i))

  val c=d.rightOuterJoin(d.reduceByKey(_+_)).collect
  val f=d.leftOuterJoin(d.reduceByKey(_+_)).collect
  val g=d.join(d.reduceByKey(_ + _)).collect
}

在检查Spark UI时,我会得到以下阶段的工作:enter image description here

我原本希望跳过第3阶段和第6阶段,因为它们使用相同的RDD来计算所需的联接(考虑到在发生随机播放的情况下,spark会自动缓存数据)。谁能解释为什么我在这里看不到任何跳过的阶段?以及如何修改代码以查看跳过的阶段?并且还有其他情况(除了改组之外),当Spark有望跳过阶段时?

apache-spark rdd
1个回答
0
投票

我怀疑由于3个操作并且没有在d上进行缓存,它重新执行d的读取。

© www.soinside.com 2019 - 2024. All rights reserved.