DAG和Spark执行

时间:2017-01-13 15:44:51

标签: apache-spark directed-acyclic-graphs

我正在努力更好地了解Spark内部,我不知道如何解释生成的DAG工作。 灵感来自http://dev.sortable.com/spark-repartition/所描述的例子, 我在Spark shell中运行以下代码以获取2到2百万的素数列表。 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。

现在我的问题是:我只调用该函数减一次,为什么会出现此操作 DAG三次? 另外,是否有任何教程可以解释Spark如何创建这些DAG? 提前谢谢。

enter image description here

1 个答案:

答案 0 :(得分:1)

subtract是一种需要改组的转型:

  • 首先必须使用相同的分区器重新分区RDDs本地("地图侧")部分转换在阶段0和1中标记为subtract。此时,两个RDD都转换为(item, null)对。
  • 你在第二阶段看到的
  • substract发生在混合RDD之后。这是过滤物品的地方。

一般而言,任何需要随机播放的操作都将至少执行两个阶段(取决于前任的数量),属于每个阶段的任务将单独显示。