如何在Apache Spark中的RDD中传递沿袭

Sak*_*kib 2 apache-spark rdd

每个RDD指向同一个谱系图

要么

当父RDD将其谱系赋予新RDD时,谱系图也是由子项复制的,因此父项和子项都有不同的图形.在这种情况下是不是内存密集?

Sat*_*ish 8

每个RDD都维护一个指向一个或多个父级的指针以及有关它与父级的关系类型的元数据.例如,当我们在RDD上调用val b = a.map()时,RDD b只保留一个引用(并且从不复制)到它的父级a,这是一个沿袭.

当驱动程序提交作业时,RDD图将序列化到工作节点,以便每个工作节点在不同的分区上应用一系列转换(如映射过滤器等).此外,如果发生某些故障,此RDD沿袭将用于重新计算数据.

为了显示RDD的谱系,Spark提供了一种调试方法toDebugString()方法.

考虑以下示例,

val input = sc.textFile("log.txt")
val splitedLines = input.map(line => line.split(" "))
                    .map(words => (words(0), 1))
                    .reduceByKey{(a,b) => a + b}
Run Code Online (Sandbox Code Playgroud)

执行toDebugString()splitedLinesRDD,将输出以下,

(2) ShuffledRDD[6] at reduceByKey at <console>:25 []
    +-(2) MapPartitionsRDD[5] at map at <console>:24 []
    |  MapPartitionsRDD[4] at map at <console>:23 []
    |  log.txt MapPartitionsRDD[1] at textFile at <console>:21 []
    |  log.txt HadoopRDD[0] at textFile at <console>:21 []
Run Code Online (Sandbox Code Playgroud)

有关Spark如何在内部工作的更多信息,请阅读我的另一篇文章