Using Adaptive Query Execution
Spark 3.0 and later includes an additional layer of optimization that is called Adaptive Query Execution (AQE)spark.sql.adaptive.enabled=false. AQE has three primary features: coalescing post-shuffle partitions, converting sort-merge joins to broadcast joins, and optimizing skew joins.