我正在努力更好地了解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? 提前谢谢。
答案 0 :(得分:1)
subtract
是一种需要改组的转型:
RDDs
本地("地图侧")部分转换在阶段0和1中标记为subtract
。此时,两个RDD都转换为(item, null)
对。substract
发生在混合RDD之后。这是过滤物品的地方。一般而言,任何需要随机播放的操作都将至少执行两个阶段(取决于前任的数量),属于每个阶段的任务将单独显示。