Spark 是不是为创建的每个 RDD 单独维护沿袭图?

Posted

技术标签:

【中文标题】Spark 是不是为创建的每个 RDD 单独维护沿袭图?【英文标题】:Does Spark separately maintains lineage graph for each RDD created?Spark 是否为创建的每个 RDD 单独维护沿袭图? 【发布时间】:2018-08-03 11:53:26 【问题描述】:

我对 Spark 执行期间的 DAG 创建有疑问。以这段代码sn-p为例。

public static void main(String[] args) 
           System.setProperty("hadoop.home.dir", "C:\\winutils");
           SparkConf conf = new SparkConf().setAppName("MyFirstProgram").setMaster("local[*]");
           JavaSparkContext sc = new JavaSparkContext(conf);


           JavaRDD<Integer> rdd1 = sc.parallelize(Arrays.asList(1, 2, 3, 4, 5,6,7,8,9,10)); 
           JavaRDD<Integer> rdd2 =  rdd1 .filter(x -> x > 2 && x < 8 ? true : false); 
           JavaRDD<Integer> rdd3 =  rdd2 .map(x -> x % 2 == 0 ? x * x : x * x * x);


           List<Integer> list = rdd3.collect(); 


           for (int i : list) 
                     System.out.println(i);
            
            sc.close();
   

spark 是为每个 RDD 创建单独的 DAG/沿袭图,还是通过在 spark 遇到转换时不断在其上添加顶点来维护单个 DAG?

换句话说,对于上述程序,

所有 rdd 中是否只有一个 DAG?像下面 -

或者如下图所示,每个 rdd1、rdd2 和 rdd3 的三个独立的谱系图?

【问题讨论】:

【参考方案1】:

每个 RDD 都有自己的沿袭/DAG。应用程序中的所有转换都没有“全局”DAG。

但是,节点 (RDD) 在 DAG 之间是“共享的” - 所有三个 DAG 中的 RDD1 都指的是同一个对象。

【讨论】:

感谢您的回答,您能否提供任何支持链接到您的回答。非常感谢:)

以上是关于Spark 是不是为创建的每个 RDD 单独维护沿袭图?的主要内容,如果未能解决你的问题,请参考以下文章

任务不可序列化错误:Spark

Spark——RDD属性

6.Pair RDD操作

Spark 创建 numpy 数组 RDD 的最快方法

Spark-Core RDD转换算子-Value型

在Apache Spark上为每个工作者创建一个单例