在 Apache Spark 中创建 DAG
Posted
技术标签:
【中文标题】在 Apache Spark 中创建 DAG【英文标题】:DAG creation in Apache Spark 【发布时间】:2018-05-28 09:46:23 【问题描述】:在 Apache Spark 中,我知道当我使用一些转换函数时,所有函数都存储为 DAG,当我调用一个动作时,Spark 会从该 DAG 运行所有必需的转换函数,直到动作函数。 所以,假设我有
步骤 1。 3 个转换函数 步骤 2。 1 次操作 步骤 3。 4 个使用上述动作输出的转换函数。 第四步。 1 次操作所以,我的问题是在第 2 步调用第一个操作之后,dag 是否被删除,当调用第二个操作时,新的 DAG 是从第 3 步创建的,还是从第 1 步创建的新 DAG?
【问题讨论】:
您能解释一些您想在步骤 3 中使用其输出的示例操作吗? 【参考方案1】:Spark 使用弹性分布式数据集 (RDD),它表示数据的集合。 Spark 可以将其存储在分布式内存中。如您所述,RDD 构建在 DAG 中。
在你的情况下:
在第一个动作中,计算来自 DAG 的计算,并产生 RDD。 在第 3 步中,这个新创建的 RDD 被用作新 DAG 的输入。 在第 4 步中,计算此 DAG,并生成最终 RDD。【讨论】:
感谢您的回复。所以你的意思是说,在步骤 2 的计算之后,来自步骤 1-2 的 DAG 将被删除,只有步骤 2 的输出 RDD 的值将被进一步使用,并且只会为步骤 3-4 创建新的 DAG。 Spark 不会重新计算步骤 1 中的值。如果我错了,请纠正我。谢谢。 我不知道(也不认为这很重要)旧的 DAG 是否会在技术上被删除。重要的是,Spark 不会重新计算第 1 步的值,但会使用第一个 Action 的输出。你说的对。这种技术称为惰性评估。 非常感谢,这就是我想澄清的。我遇到了一个错误,因为我在许多转换函数之后执行了一个操作,所以它给了我 *** 错误和一些树错误。所以。当我在两者之间使用一些操作来减少 DAG 的长度时,它起作用了,尽管它需要更多的时间来计算。 是的,这确实有道理。我很高兴能帮上忙。以上是关于在 Apache Spark 中创建 DAG的主要内容,如果未能解决你的问题,请参考以下文章