何时创建 RDD 沿袭?如何找到谱系图?

Posted

技术标签:

【中文标题】何时创建 RDD 沿袭?如何找到谱系图?【英文标题】:When does a RDD lineage is created? How to find lineage graph? 【发布时间】:2017-12-07 10:51:02 【问题描述】:

我正在学习 Apache Spark 并尝试获取 RDD 的沿袭图。 但我找不到特定谱系何时创建? 另外,在哪里可以找到 RDD 的血统?

【问题讨论】:

【参考方案1】:

RDD 沿袭 是 分布式计算的逻辑执行计划,每次您在任何 RDD 上应用转换时都会创建和扩展该计算。

注意执行操作后发生的“逻辑”而非“物理”部分。

引用Mastering Apache Spark 2gitbook:

RDD Lineage(又名RDD 算子图RDD 依赖图)是一个RDD 的所有父RDD 的图。它是通过对 RDD 应用转换并创建逻辑执行计划而构建的。

因此,RDD 沿袭图是在调用操作后需要执行哪些转换的图。

任何 RDD 都有一个 RDD lineage,即使这意味着 RDD lineage 只是单个节点,即 RDD 本身。这是因为 RDD 可能是也可能不是一系列转换的结果(没有转换是“零效应”转换:))

您可以使用RDD.toDebugString 来检查 RDD 的 RDD 沿袭:

toDebugString: String 对此 RDD 及其用于调试的递归依赖项的描述。

val nums = sc.parallelize(0 to 9)
scala> nums.toDebugString
res0: String = (8) ParallelCollectionRDD[0] at parallelize at <console>:24 []

val doubles = nums.map(_ * 2)
scala> doubles.toDebugString
res1: String =
(8) MapPartitionsRDD[1] at map at <console>:25 []
 |  ParallelCollectionRDD[0] at parallelize at <console>:24 []

val groups = doubles.groupBy(_ < 10)
scala> groups.toDebugString
res2: String =
(8) ShuffledRDD[3] at groupBy at <console>:25 []
 +-(8) MapPartitionsRDD[2] at groupBy at <console>:25 []
    |  MapPartitionsRDD[1] at map at <console>:25 []
    |  ParallelCollectionRDD[0] at parallelize at <console>:24 []

【讨论】:

以上是关于何时创建 RDD 沿袭?如何找到谱系图?的主要内容,如果未能解决你的问题,请参考以下文章

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

RDD 沿袭缓存

Spark RDD 沿袭和存储

如何递归地创建谱系并查找匹配以进行近亲繁殖检测 (Oracle)

spark系列之基本概念

为啥 RDD 不适合流式任务?