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

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

【问题讨论】:

    标签: apache-spark 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 []
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-02
      • 2016-08-26
      相关资源
      最近更新 更多