我希望找到有关sparkDataframe在依赖于其他Dataframe时如何执行的细节。e、 假设,我有3个Dataframe。df1、df2和df3。df1-从表a读取df2—从df1读取。df3-连接df1和df2。当我执行df3.show()时,它还会在后端执行df1和df2吗?
bkkx9g8r1#
多方面的小问题。spark使用惰性评估。show()将触发一个操作。resultstage是创建的。建立的计划,基于行动,将有融合的代码(Map,过滤器或狭窄的转换)在一起/优化,如果可能的话,在一个阶段,所以你可能不会真正得到一个df2物理,但你可以。这完全取决于在各个阶段上的洗牌(通常是广泛转换的结果)。i、 你是否有广泛的转变和特殊的东西,在背景中激发了提升者,例如一个支点。就你而言:是的,因为它是从休息。df2以及它的一部分加入洗牌,但如果它是一个简单的Map和过滤器的结果,那么可能不是。和df3以及它是连接,其中涉及洗牌。由于这是一个冗长的讨论,这里有一个很好的链接:https://mapr.com/blog/how-spark-runs-your-applications/我不使用缓存,但请尝试下面的代码并查看sql选项卡和stages选项卡。另外,尝试不使用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)
vd2z7a6w2#
spark执行延迟操作。直到动作调用它才会执行。当我们提交spark应用程序时,spark会创建一个有向无环图(dag)。它包含沿袭图,它可以帮助我们在任何执行器失败的情况下恢复Dataframe。根据dag,读取是第一个操作,然后是转换。最后,给出结果。
2条答案
按热度按时间bkkx9g8r1#
多方面的小问题。
spark使用惰性评估。
show()将触发一个操作。resultstage是创建的。
建立的计划,基于行动,将有融合的代码(Map,过滤器或狭窄的转换)在一起/优化,如果可能的话,在一个阶段,所以你可能不会真正得到一个df2物理,但你可以。这完全取决于在各个阶段上的洗牌(通常是广泛转换的结果)。i、 你是否有广泛的转变和特殊的东西,在背景中激发了提升者,例如一个支点。
就你而言:
是的,因为它是从休息。
df2以及它的一部分加入洗牌,但如果它是一个简单的Map和过滤器的结果,那么可能不是。
和df3以及它是连接,其中涉及洗牌。
由于这是一个冗长的讨论,这里有一个很好的链接:https://mapr.com/blog/how-spark-runs-your-applications/
我不使用缓存,但请尝试下面的代码并查看sql选项卡和stages选项卡。另外,尝试不使用join,看看会发生什么。
vd2z7a6w2#
spark执行延迟操作。直到动作调用它才会执行。
当我们提交spark应用程序时,spark会创建一个有向无环图(dag)。它包含沿袭图,它可以帮助我们在任何执行器失败的情况下恢复Dataframe。
根据dag,读取是第一个操作,然后是转换。最后,给出结果。