Github user cloud-fan commented on a diff in the pull request:

    https://github.com/apache/spark/pull/19714#discussion_r153680715
  
    --- Diff: 
sql/core/src/main/scala/org/apache/spark/sql/execution/SparkStrategies.scala ---
    @@ -153,6 +151,27 @@ abstract class SparkStrategies extends 
QueryPlanner[SparkPlan] {
     
           // --- BroadcastHashJoin 
--------------------------------------------------------------------
     
    +      case ExtractEquiJoinKeys(joinType, leftKeys, rightKeys, condition, 
left, right)
    +        if canBuildRight(joinType) && canBuildLeft(joinType)
    +          && left.stats.hints.broadcast && right.stats.hints.broadcast =>
    --- End diff --
    
    I think we can create new methods for it
    ```
    def shouldBuildLeft(joinType: JoinType, left: LogicalPlan, right: 
LogicalPlan): Boolean {
      if (left.stats.hints.broadcast) {
        if (canBuildRight(joinType) && right.stats.hints.broadcast) {
          // if both sides have broadcast hint, only broadcast left side if its 
estimated pyhsical size is smaller than right side
          left.stats.sizeInBytes <= right.stats.sizeInBytes
        } else {
          // if only left side has the broadcast hint, broadcast the left side.
          true
        }
      } else {
          if (canBuildRight(joinType) && right.stats.hints.broadcast) {
            // if only right side has the broadcast hint, do not broadcast the 
left side.
            false
          } else {
            // if neither one of the sides has broadcast hint, only broadcast 
the left side if its estimated physical size is smaller than the treshold and 
smaller than right side.
            canBroadcast(left) && left.stats.sizeInBytes <= 
right.stats.sizeInBytes
          }
      }
    }
    
    def shouldBuildRight...
    ```
    and use it like
    ```
    case ExtractEquiJoinKeys(joinType, leftKeys, rightKeys, condition, left, 
right)
        if canBuildRight(joinType) && shouldBuildRight(joinType, left, right)
    ```


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to