Spark 是否为每个创建的 RDD 单独维护沿袭图?
Does Spark separately maintains lineage graph for each RDD created?
我对 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/lineage 图,还是通过在 spark 遇到转换时不断在其上添加顶点来维护单个 DAG?
换句话说,对于上面的程序,
会不会所有rdds都只有一个DAG?像下面-
或者如下所示,每个rdd1、rdd2和rdd3的三个独立的谱系图?
每个 RDD 都有自己的沿袭/DAG。应用程序中的所有转换都没有 "global" DAG。
但是,DAG 之间的节点 (RDD) "shared" - 所有三个 DAG 中的 RDD1 都指向同一个对象。
我对 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/lineage 图,还是通过在 spark 遇到转换时不断在其上添加顶点来维护单个 DAG?
换句话说,对于上面的程序,
会不会所有rdds都只有一个DAG?像下面-
或者如下所示,每个rdd1、rdd2和rdd3的三个独立的谱系图?
每个 RDD 都有自己的沿袭/DAG。应用程序中的所有转换都没有 "global" DAG。
但是,DAG 之间的节点 (RDD) "shared" - 所有三个 DAG 中的 RDD1 都指向同一个对象。