在 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的主要内容,如果未能解决你的问题,请参考以下文章

火花在UDF中创建数据框

如何在 spark 2(java) 中创建广播变量?

使用Scala在Spark中创建DataFrame时出错

如何在 Spark 中创建 UDF 以支持自定义谓词

使用具有常量值的 var 在 Spark DataFrame 中创建一个新列

Apache Spark 启动多个 SparkContext 实例