我正在查看Spark UI DAG可视化代码,并找到以下snippet:
edges.foreach { case e: RDDOperationEdge =>
val fromThisGraph = nodes.contains(e.fromId)
val toThisGraph = nodes.contains(e.toId)
(fromThisGraph, toThisGraph) match {
case (true, true) => internalEdges += e
case (true, false) => outgoingEdges += e
case (false, true) => incomingEdges += e
// should never happen
case _ => logWarning(s"Found an orphan edge in stage ${stage.stageId}: $e")
据我所知,内部边缘表示一个阶段内RDD之间的边缘,入射边缘来自前一阶段到当前阶段的RDD,而外出边缘将来自当前阶段的RDD到后续阶段。但是,从edges are created based on the RDDs parentIds开始,我很难理解外边缘是如何出现的,因为在当前阶段的分析中找不到指向当前阶段的parentId的RDD。
我是否认为即使外出的遗嘱永远不会存在?
答案 0 :(得分:0)
outgoingEdges可能存在,它们是边缘,最后没有节点。
如果您观察到
行case (true, false) => outgoingEdges += e
fromThisGraph = true,即e.fromId存在于节点中; toThisGraph = false,即e.toId不存在于节点中,表示分支的另一端连接到无节点
--------------- e
| node |------>-----
---------------
与incomingEdges类似,没有起始节点。
我希望我有意义