Возможно, вы явно используете функцию широковещания. Даже если вы установите spark. sql .autoBroadcastJoinThreshold = -1 и явно используете функцию широковещания, она выполнит широковещательное соединение.
Другая причина может заключаться в том, что вы выполняете декартово соединение / неравное соединение, которое заканчивающийся в Broadcastted Nested l oop join (BNLJ join). Как уже упоминалось, вам лучше использовать объяснение и понимать, что происходит.
Чтобы преобразовать оптимизированный логический план в физический план, Spark использует некоторый набор стратегий. Для объединений Spark использует JoinSelection.
Способ работы описан здесь - https://github.com/apache/spark/blob/aefb2e7/sql/core/src/main/scala/org/apache/spark/sql/execution/SparkStrategies.scala#L326
Требования к выбору физического оператора объединения для BroadcastNestedLoopJoinExe c -
Нет ключей объединения, и выполняется одно из следующих действий:
1) Тип соединения: CROSS, INNER, LEFT ANTI, LEFT OUTER, LEFT SEMI или ExistenceJoin (т. Е. CanBuildRight для входного joinType положителен) и правая сторона соединения может быть передана
2) Тип соединения: CROSS, INNER или RIGHT OUTER (т. е. canBuildLeft для входного joinType положителен), а левая сторона соединения может быть передана
ИЛИ
Ни один другой оператор соединения уже не соответствует