如果一个Dataframe依赖于另一个Dataframe,sparkDataframe执行如何工作?

dxxyhpgq  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(350)

我希望找到有关sparkDataframe在依赖于其他Dataframe时如何执行的细节。
e、 假设,我有3个Dataframe。df1、df2和df3。
df1-从表a读取
df2—从df1读取。
df3-连接df1和df2。
当我执行df3.show()时,它还会在后端执行df1和df2吗?

bkkx9g8r

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)
vd2z7a6w

vd2z7a6w2#

spark执行延迟操作。直到动作调用它才会执行。
当我们提交spark应用程序时,spark会创建一个有向无环图(dag)。它包含沿袭图,它可以帮助我们在任何执行器失败的情况下恢复Dataframe。
根据dag,读取是第一个操作,然后是转换。最后,给出结果。

相关问题