当 shuffle 分区大于 200(数据帧中的 spark.sql.shuffle.partitions 200(默认情况下))时会发生什么

what happens when shuffle partition is greater than 200( spark.sql.shuffle.partitions 200(by default) in dataframe)

spark sql 混洗数据的聚合操作,即 spark.sql.shuffle.partitions 200(默认情况下)。当 shuffle 分区大于 200 时性能会发生什么变化。

当分区数大于 2000 时,Spark 使用不同的数据结构进行随机簿记。因此,如果分区数接近 2000,则将其增加到 2000 以上。

但我的问题是当 shuffle 分区大于 200(比方说 300)时会有什么行为。

根据相对较大的集群上的典型工作负载为作业分配了足够的资源,默认选择数字 200。否则,应根据 2 个因素选择此数字 - 可用内核数和分区大小(建议使分区接近 100Mb)。所选的分区数应该是可用内核数的倍数,但不应太大(通常是内核数的 1-3 倍)。如果分区数大于默认值,不应更改 Spark 的行为 - 它只会增加 Spark 需要执行的任务数。

你可以看看this talk from Spark + AI Summit 2019 - 它涵盖了很多关于Spark程序优化的细节,包括分区数量的选择。