一次调用所有Spark函数比单独调用更快吗



我很好奇同时调用Spark(PySpark(函数与单独调用它们相比是否更快或更高效?

例如:

final_df = data_frame1.doFirstThing() 
.doSecondThing() 
.doThirdThing() 
.doFourthThing()

data_frame2 = data_frame1.doFirstThing()
data_frame3 = data_frame2.doSecondThing()
data_frame4 = data_frame3.doThirdThing()
final_df = data_frame4.doFourthThing()

我倾向于看到很多第一种方法,但它使调试更加困难。我很好奇这是如何处理的,以及我是否通过将事情分解成单独的操作来射中自己的脚。

简单的答案是没关系,spark很懒,不会做第一、第二、第三。。。直到你调用一个动作,即.write.collect或类似的动作。在那之前,它只记录你要求它做什么。

话虽如此,但这也取决于调试的方式。当您说"这会使调试更加困难"时,如果您的意思是希望在操作之间检查架构和列名,那也没关系。然而,如果你在两步之间调用data_frame.takedata_frame.show,你可能真的在开枪打自己的脚。Spark有时会非常聪明,例如,如果你做df.select(df.col_a - df.col_b).where(df.col_a > df.col_b),Spark会颠倒这些运算的顺序,因为做一个你只会扔掉的计算没有意义。如果你实现了一个部分结果,spark可能无法像拥有完整查询时那样优化,而且spark并不总是缓存中间结果,所以当你运行最终查询时,这些计算可能需要重复。

TLDR,分解是可以的,请注意您在中间数据帧上运行的操作。

最新更新