为什么spark中的一些音符非常慢?为什么相同情况下的多次执行有不同的执行时间?

t3irkdon  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(524)

我的问题是关于飞艇中Pypark代码的执行时间。
我有一些笔记和一些sql在里面。在我的一个笔记中,我使用.topandas()函数将Dataframe转换为panda。我的数据大小约为600兆字节。
我的问题是要花很长时间。
如果我像这样使用采样:

df.sample(False, 0.7).toPandas()

它工作正常,在可接受的时间内。
另一个奇怪的地方是,当我运行这个笔记几次,有时工作快,有时慢。例如,对于重启pyspark解释器后的第一次运行,它工作得更快。
我怎样才能在稳定的状态下和齐柏林飞艇一起工作?哪些参数对在可接受的时间内运行spark代码有效?

qrjkbowd

qrjkbowd1#

这里的问题不是齐柏林飞艇,而是你作为一个程序员。spark是一个用scala编写的分布式(集群计算)数据分析引擎,因此在jvm中运行。pyspark是spark的pythonapi,它使用py4j库为jvm对象提供接口。
方法如 .toPandas() 或者 .collect() 返回一个python对象,它不仅仅是jvm对象的接口(即它实际上包含您的数据)。它们代价高昂,因为它们需要将您的(分布式)数据从jvm传输到spark驱动程序中的python解释器。因此,您应该只在生成的数据很小的情况下使用它,并尽可能长时间地使用pysparkDataframe。
关于不同执行时间的其他问题需要与集群管理员讨论。网络峰值和其他用户提交的作业会严重影响您的执行时间。我还感到惊讶的是,重新启动spark解释器后的第一次运行速度更快,因为在第一次运行期间,会创建sparkcontext并分配集群资源,这会增加一些开销。

相关问题