pyspark RDD中的分区数量和Spark中的性能

iyzzxitl  于 2023-03-01  发布在  Spark
关注(0)|答案(3)|浏览(226)

在Pyspark中,我可以从一个列表中创建一个RDD,并决定有多少个分区:

sc = SparkContext()
sc.parallelize(xrange(0, 10), 4)

我决定对RDD进行分区的分区数量对性能有何影响?这与我的机器拥有的内核数量有何关系?

eiee3dmh

eiee3dmh1#

主要影响是指定的分区太少或***太多***。

分区太少您将无法利用群集中所有可用的核心。
分区太多管理许多小任务会产生过多的开销。

在这两者之间,第一个对性能的影响要大得多。对于分区数低于1000的情况,调度太多的小任务的影响相对较小。如果你有成千上万个分区,那么spark会变得***非常***慢。

1tuwyuhd

1tuwyuhd2#

为了补充@WestCoastProject的精彩回答,我记得文档建议将分区数量设置为集群中CPU内核数量的3或4倍,以便在可用CPU内核之间更均匀地分配工作。如果集群中每个CPU核心只有1个分区,则必须等待运行时间最长的任务完成,但如果您已将其分解此外,工作负荷将更均匀地平衡,快和慢运行任务被拉平。

ccrfmcuu

ccrfmcuu3#

划分的数量对spark的代码性能有很大的影响。
理想情况下,spark分区暗示了您想要shuffle的数据量。通常您应该在shuffle大小(shuffle读/写)上设置此参数,然后您可以将每个分区的分区数设置为128到256 MB以获得最大性能。
您可以在您的Spark SQL代码中设置partition,方法是将该属性设置为:

Spark.sql. Shuffle .分区

或者在使用任何 Dataframe 时,您可以通过以下方式进行设置:

df.重新分区(分区数)

相关问题