DAG和Spark的执行

3
我想更好地了解Spark内部机制,但不确定如何解释作业的DAG结果。 受http://dev.sortable.com/spark-repartition/描述的示例启发, 我在Spark shell中运行以下代码,以获取从2到200万的质数列表。 val n = 2000000 val composite = sc.parallelize(2 to n, 8).map(x => (x, (2 to (n / x)))).flatMap(kv => kv._2.map(_ * kv._1)) val prime = sc.parallelize(2 to n, 8).subtract(composite) prime.collect() 执行后,我检查了SparkUI并观察了图中的DAG。
现在我的问题是:我只调用了一次subtract函数,为什么DAG中会出现三次此操作? 此外,是否有任何教程可以解释一下Spark如何创建这些DAG? 提前致谢。

enter image description here

1个回答

2

subtract是一种需要使用shuffle的转换:

  • 首先,必须使用相同的分区器重新分区两个RDDs。在转换的"map-side"部分中,阶段0和1标记为subtract。此时,两个RDD都被转换为(item, null)对。
  • substract出现在第2阶段,在RDDs合并后进行shuffle。这是过滤项的地方。

一般来说,任何需要shuffle的操作都将在至少两个阶段执行(取决于前置任务数),每个阶段的任务将分别显示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接