Spark skewedPartitionThresholdInBytes 未得到强制执行

问题描述 投票:0回答:1

对 Spark 相对较新,对 PySpark 的行为感到好奇,

使用 PySpark 执行内部联接(根据执行计划:SortMergeJoin)时,启用以下参数:

spark.sql.adaptive.enabled  true

spark.sql.adaptive.coalescePartitions.enabled    true

spark.sql.adaptive.skewJoin.enabled     true

我看到作业执行期间存在大于

spark.sql.adaptive.skewJoin.skewedPartitionThresholdInBytes
(默认值256 MB)的分区。 参考这个

分区大小的中位数达到 18MB。

spark.sql.adaptive.skewJoin.skewedPartitionFactor
也设置为默认值 5

然而,存在 2 个存在相当大偏差的分区:分别为 1454.9 MiB 和 791.5 MiB。

上面的参数不是应该确保这 2 个分区被分割成更小的分区以避免数据倾斜吗?

apache-spark pyspark apache-spark-sql query-optimization skew
1个回答
0
投票

很多事情都可能导致 AQE 不应用倾斜连接优化,特别是在 Spark 的早期版本中。引用自这个答案

“如果您手动更改分区数量,那么它将被跳过。同样,如果您使用缓存,大部分 AQE 将被跳过。在 3.3 中,当您使用配置 Spark.sql.adaptive 手动分区时,可以强制倾斜连接优化.forceOptimizeSkewedJoin。

© www.soinside.com 2019 - 2024. All rights reserved.