Github user cloud-fan commented on a diff in the pull request:
https://github.com/apache/spark/pull/20099#discussion_r159059913
--- Diff:
sql/core/src/main/scala/org/apache/spark/sql/execution/SparkStrategies.scala ---
@@ -158,45 +158,65 @@ abstract class SparkStrategies extends
QueryPlanner[SparkPlan] {
def smallerSide =
if (right.stats.sizeInBytes <= left.stats.sizeInBytes) BuildRight
else BuildLeft
- val buildRight = canBuildRight && right.stats.hints.broadcast
- val buildLeft = canBuildLeft && left.stats.hints.broadcast
-
- if (buildRight && buildLeft) {
+ if (canBuildRight && canBuildLeft) {
// Broadcast smaller side base on its estimated physical size
// if both sides have broadcast hint
smallerSide
- } else if (buildRight) {
+ } else if (canBuildRight) {
BuildRight
- } else if (buildLeft) {
+ } else if (canBuildLeft) {
BuildLeft
- } else if (canBuildRight && canBuildLeft) {
+ } else {
// for the last default broadcast nested loop join
smallerSide
- } else {
- throw new AnalysisException("Can not decide which side to
broadcast for this join")
}
}
+ private def canBroadcastByHints(joinType: JoinType, left: LogicalPlan,
right: LogicalPlan)
+ : Boolean = {
+ val buildLeft = canBuildLeft(joinType) && left.stats.hints.broadcast
--- End diff --
if both sides have the broadcast hint, we prefer to build left, is it
expected?
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]