Skip to content

BroadcastNestedLoopJoinExec Binary Physical Operator

BroadcastNestedLoopJoinExec is a binary physical operator that is <> (and converted to) when JoinSelection physical plan strategy finds a Join.md[Join] logical operator that meets either case:

Note

BroadcastNestedLoopJoinExec is the default physical operator when no other operators have matched selection requirements.

[NOTE]

canBuildRight join types are:

  • CROSS, INNER, LEFT ANTI, LEFT OUTER, LEFT SEMI or Existence

canBuildLeft join types are:

* CROSS, INNER, RIGHT OUTER

val nums = spark.range(2)
val letters = ('a' to 'c').map(_.toString).toDF("letter")
val q = nums.crossJoin(letters)

scala> q.explain
== Physical Plan ==
BroadcastNestedLoopJoin BuildRight, Cross
:- *Range (0, 2, step=1, splits=Some(8))
+- BroadcastExchange IdentityBroadcastMode
   +- LocalTableScan [letter#69]

[[requiredChildDistribution]] .BroadcastNestedLoopJoinExec's Required Child Output Distributions [cols="1m,2,2",options="header",width="100%"] |=== | BuildSide | Left Child | Right Child

| BuildLeft | BroadcastDistribution (uses IdentityBroadcastMode broadcast mode) | UnspecifiedDistribution

| BuildRight | UnspecifiedDistribution | BroadcastDistribution (uses IdentityBroadcastMode broadcast mode) |===

=== [[creating-instance]] Creating BroadcastNestedLoopJoinExec Instance

BroadcastNestedLoopJoinExec takes the following when created:

  • [[left]] Left SparkPlan.md[physical operator]
  • [[right]] Right SparkPlan.md[physical operator]
  • [[buildSide]] BuildSide
  • [[joinType]] Join type
  • [[condition]] Optional join condition expressions/Expression.md[expressions]

Performance Metrics

Key Name (in web UI) Description
numOutputRows number of output rows Number of output rows

BroadcastNestedLoopJoinExec in web UI (Details for Query)