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

时间:2018-08-03 11:53:26

标签: apache-spark lazy-evaluation directed-acyclic-graphs

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

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 /谱系图,还是通过在火花遇到转换时不断在其上添加顶点来维护一个DAG?

换句话说,上面的程序,

所有rdds是否只有一个DAG?像下面 enter image description here

或如下所示,分别为rdd1,rdd2和rdd3提供三个独立的谱系图? enter image description here

1 个答案:

答案 0 :(得分:1)

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

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