jackylee-ch commented on code in PR #44661:
URL: https://github.com/apache/spark/pull/44661#discussion_r1455516769


##########
sql/core/src/main/scala/org/apache/spark/sql/execution/adaptive/CoalesceShufflePartitions.scala:
##########
@@ -146,13 +147,15 @@ case class CoalesceShufflePartitions(session: 
SparkSession) extends AQEShuffleRe
       Seq(collectShuffleStageInfos(r))
     case unary: UnaryExecNode => collectCoalesceGroups(unary.child)
     case union: UnionExec => union.children.flatMap(collectCoalesceGroups)
-    // If not all leaf nodes are exchange query stages, it's not safe to 
reduce the number of
-    // shuffle partitions, because we may break the assumption that all 
children of a spark plan
-    // have same number of output partitions.
     // Note that, `BroadcastQueryStageExec` is a valid case:
     // If a join has been optimized from shuffled join to broadcast join, then 
the one side is
     // `BroadcastQueryStageExec` and other side is `ShuffleQueryStageExec`. It 
can coalesce the
     // shuffle side as we do not expect broadcast exchange has same partition 
number.
+    case join: BroadcastHashJoinExec => 
join.children.flatMap(collectCoalesceGroups)
+    case join: BroadcastNestedLoopJoinExec => 
join.children.flatMap(collectCoalesceGroups)
+    // If not all leaf nodes are exchange query stages, it's not safe to 
reduce the number of
+    // shuffle partitions, because we may break the assumption that all 
children of a spark plan
+    // have same number of output partitions.
     case p if p.collectLeaves().forall(_.isInstanceOf[ExchangeQueryStageExec]) 
=>

Review Comment:
   > It seems we should improve this line to check if the child of 
`BroadcastQueryStageExec` exists `Union`.
   
   In fact, I have tested the queries with various join types and join types 
with 'union', and found that `ShuffledHashJoin` and `SortMergeJoin` work 
normally, while `BroadcastJoin` and `CartesianProduct` with `Union` fail. The 
former case we should ignore broadcast joins, while the latter requires 
additional detection. Maybe we should add the union check and solve the latter 
cases in this pr?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to