在Pyspark中,我可以从列表中创建RDD并确定要分区的数量:
sc = SparkContext()
sc.parallelize(xrange(0, 10), 4)
我决定对RDD进行分区的分区数量如何影响性能? 这取决于我的机器核心数量如何?
答案 0 :(得分:39)
主要影响是指定的分区太少或 远 分区太多。
分区太少您将无法使用群集中的所有可用核心。
分区太多管理许多小任务会产生过多的开销。
在两者之间,第一个对性能影响更大。对于低于1000的分区计数,此时调度太多小任务对此影响相对较小。如果您有数万个分区的数量级,那么spark会 非常 慢
答案 1 :(得分:30)
为了添加到javadba的优秀答案,我记得文档建议将您的分区数设置为群集中CPU核心数的3或4倍,以便在可用的工作中更均匀地分配工作CPU核心。这意味着,如果群集中每个CPU核心只有1个分区,则必须等待一个运行时间最长的任务才能完成,但如果你进一步将其分解,则工作负载将更均匀地与快速和慢速运行的任务平衡
答案 2 :(得分:1)
分区数量对Spark代码性能有很大影响。理想情况下,spark分区表示您希望重新整理多少数据。通常,您应该根据随机播放大小(随机播放读写)设置此参数,然后可以决定每个分区的分区数量为128到256 MB,以获得最佳性能。
您可以通过将属性设置为在Spark sql代码中设置分区: spark.sql.shuffle.partitions 或者在使用任何数据框时,您可以通过belo进行设置: df.repartition(numOfPartitions)