Что такое Inner Like join? - PullRequest
1 голос
/ 21 марта 2019

В исходном коде Spark для стратегий соединения упоминаются комментарии к коду для широковещательного хеш-соединения (BHJ):

BHJ не поддерживается для полного внешнего соединения.Для правого внешнего соединения мы можем транслировать только левую сторону.Для левого внешнего, левого полу, левого анти-типа и внутреннего типа соединения ExistenceJoin мы можем транслировать только правую сторону.Для внутреннего соединения мы можем транслировать обе стороны.Обычно BHJ может работать быстрее, чем другие алгоритмы соединения, когда широковещательная сторона мала.Однако широковещательные таблицы являются интенсивной сетью.Это может вызвать OOM или работать хуже, чем у других алгоритмов соединения, особенно когда сторона сборки / трансляции велика.

Не могли бы вы объяснить, что в комментариях к коду означает

"внутреннее соединение"

кодовая ссылка

Ответы [ 2 ]

3 голосов
/ 21 марта 2019

в соответствии с документом для операторов соединения набора данных innerlike используется для соединений INNER и CROSS.

Вы также можете обнаружить, что Spark SQL использует следующие два семейства присоединяется:

  • InnerLike с внутренним и поперечным
  • LeftExsence с LeftSemi, LeftAnti и ExistenceJoin
1 голос
/ 22 марта 2019

Наконец найдено в коде: joinTypes.scala

InnerLike включает в себя: Внутренние и перекрестные соединения.

sealed abstract class InnerLike extends JoinType {
  def explicitCartesian: Boolean
}

case object Inner extends InnerLike {
  override def explicitCartesian: Boolean = false
  override def sql: String = "INNER"
}

case object Cross extends InnerLike {
  override def explicitCartesian: Boolean = true
  override def sql: String = "CROSS"
}
...