我正在尝试查找在我使用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
}
我原本希望跳过第3阶段和第6阶段,因为它们使用相同的RDD来计算所需的联接(考虑到在发生随机播放的情况下,spark会自动缓存数据)。谁能解释为什么我在这里看不到任何跳过的阶段?以及如何修改代码以查看跳过的阶段?并且还有其他情况(除了改组之外),当Spark有望跳过阶段时?
我怀疑由于3个操作并且没有在d上进行缓存,它重新执行d的读取。