Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 一次调用所有Spark函数比单独调用它们快吗?_Performance_Function_Pyspark - Fatal编程技术网

Performance 一次调用所有Spark函数比单独调用它们快吗?

Performance 一次调用所有Spark函数比单独调用它们快吗?,performance,function,pyspark,Performance,Function,Pyspark,我很好奇一次性调用Spark PySpark函数是否比单独调用它们更快或更高效 例如: final_df = data_frame1.doFirstThing() \ .doSecondThing() \ .doThirdThing() \ .doFourthThing() 对 data_frame2 = data_frame1.doFirstThing() da

我很好奇一次性调用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很懒,不会做第一、第二、第三。。。直到你采取行动为止(写作、收集或类似)。在那之前,它只记录你要求它做的事情

也就是说,这还取决于调试的方式。当您说这会使调试变得更困难时,如果您的意思是希望在操作之间检查模式和列名,那么这很好。但是,如果您在两个步骤之间调用data_frame.take或data_frame.show,您可能真的是自食其果。Spark有时可能非常聪明,例如,如果您执行df.selectdf.col_a-df.col_b。其中df.col_a>df.col_b,Spark将反转这些操作的顺序,因为执行一个只会丢弃的计算没有意义。如果将部分结果具体化,spark可能无法像使用完整查询时那样进行优化,而且spark并不总是缓存中间结果,因此在运行最终查询时可能需要重复这些计算


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

很可能没有什么区别-您可以检查执行计划,看看两者在引擎盖下是否做了相同的事情:final_df.explainRight。我在调试模式下运行单独的检查,例如df.show,然后在生产中关闭。只是想确保我不会无意中让自己头疼。谢谢