我正在学习Apache Spark并尝试获取RDD的谱系图。 但我找不到何时创建特定的血统? 另外,在哪里可以找到RDD的血统?
答案 0 :(得分:2)
RDD Lineage 是每次在任何 RDD上应用转换时创建和扩展的分布式计算的逻辑执行计划。
请注意执行操作后发生的“逻辑”部分而不是“物理”部分。
引用Mastering Apache Spark 2 gitbook:
RDD Lineage (又名 RDD运算符图或 RDD依赖图)是RDD的所有父RDD的图表。它是将转换应用于RDD并创建逻辑执行计划的结果。
因此,RDD沿袭图是调用动作后需要执行的转换的图表。
任何RDD都有RDD谱系,即使这意味着RDD谱系只是一个节点,即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 []