如果一个数据帧依赖于另一个数据帧,那么 spark 数据帧执行如何工作?
How does a spark dataframe execution work if one dataframe is dependent on another?
我正在寻找有关在依赖于其他数据帧时如何执行 spark 数据帧的详细信息。
例如
比方说,我有 3 个数据框。 DF1、DF2 和 DF3。
DF1 - 从 table A
读取
DF2 - 从 DF1 读取。
DF3 - 加入 DF1 和 DF2。
当我执行 DF3.show() 时,它是否也会在后端执行 DF1 和 DF2?
小问题多方面
Spark 使用惰性求值。
show() 将触发 Action。 resultStage 是创建的内容。
构建的计划,基于 Action,将融合代码(地图、过滤器又名 narrow transformations) 在 Stage 中一起/优化(如果可能的话),因此您可能无法真正获得 DF2,但您可以。这完全取决于阶段的洗牌(通常是 广泛转换 的结果)。 IE。你有 wide transformations 和 Spark 在后台发起的特殊事情吗? 枢轴.
你的情况:
- DF1 是的,因为它来自休息。
- DF2 以及 JOIN 和 shuffle 的一部分,但如果它是简单映射和过滤器的结果,那么可能不是。
- 和 DF3 以及 JOIN 涉及 shuffle.
由于这是一个冗长的讨论,这里有一个很好的link:https://mapr.com/blog/how-spark-runs-your-applications/
我离开了 缓存,但尝试下面的代码并查看 SQL 选项卡和阶段选项卡。另外,尝试不使用 JOIN 看看会发生什么。
val df1 = spark.read.parquet("simple.parquet")//.cache()
val df2 = df1.filter(df1("country") === "Holland")
val df3 = df1.join(df2, Seq("id"))
df3.show(false)
Spark 执行惰性操作。它在操作调用之前不会执行。
当我们提交 spark 应用程序时,Spark 会创建一个有向无环图 (DAG)。它包含沿袭图,可帮助我们在任何执行程序出现故障时恢复数据帧。
根据DAG,Read是第一个操作,然后是transformation。最后,它会显示结果。
我正在寻找有关在依赖于其他数据帧时如何执行 spark 数据帧的详细信息。
例如 比方说,我有 3 个数据框。 DF1、DF2 和 DF3。
DF1 - 从 table A
读取DF2 - 从 DF1 读取。
DF3 - 加入 DF1 和 DF2。
当我执行 DF3.show() 时,它是否也会在后端执行 DF1 和 DF2?
小问题多方面
Spark 使用惰性求值。
show() 将触发 Action。 resultStage 是创建的内容。
构建的计划,基于 Action,将融合代码(地图、过滤器又名 narrow transformations) 在 Stage 中一起/优化(如果可能的话),因此您可能无法真正获得 DF2,但您可以。这完全取决于阶段的洗牌(通常是 广泛转换 的结果)。 IE。你有 wide transformations 和 Spark 在后台发起的特殊事情吗? 枢轴.
你的情况:
- DF1 是的,因为它来自休息。
- DF2 以及 JOIN 和 shuffle 的一部分,但如果它是简单映射和过滤器的结果,那么可能不是。
- 和 DF3 以及 JOIN 涉及 shuffle.
由于这是一个冗长的讨论,这里有一个很好的link:https://mapr.com/blog/how-spark-runs-your-applications/
我离开了 缓存,但尝试下面的代码并查看 SQL 选项卡和阶段选项卡。另外,尝试不使用 JOIN 看看会发生什么。
val df1 = spark.read.parquet("simple.parquet")//.cache()
val df2 = df1.filter(df1("country") === "Holland")
val df3 = df1.join(df2, Seq("id"))
df3.show(false)
Spark 执行惰性操作。它在操作调用之前不会执行。
当我们提交 spark 应用程序时,Spark 会创建一个有向无环图 (DAG)。它包含沿袭图,可帮助我们在任何执行程序出现故障时恢复数据帧。
根据DAG,Read是第一个操作,然后是transformation。最后,它会显示结果。