В чем разница между INNER JOIN и ANTI JOIN - PullRequest
0 голосов
/ 14 декабря 2018

Я совершенно сбит с толку терминологией объединения в PySpark.Я перечислю, как я понимаю два из этих объединений, я просто хочу знать, правильное ли мое понимание, так как я нахожу документацию более запутанной, чем полезной.

Мы начинаем с двух фреймов данных: dfA и dfB.

dfA.join(dfB, 'user', 'inner') 

означает объединение только тех строк, где dfA и dfB имеют общие элементы в пользовательском столбце.(пересечение A и B в столбце пользователя).

dfA.join(dfB, 'user', 'leftanti') 

означает создание информационного кадра с элементами в dfA ТОГО, ЧТО НЕ в dfB.

Правильны ли эти два?

1 Ответ

0 голосов
/ 14 декабря 2018

inner join => если DFB не имеет записи для DFA, то он не возвращает несопоставленные записи.

left anti => наиболее близко к Not Exists

-- NOT EXISTS
SELECT *
FROM dfA
WHERE NOT EXISTS (
  SELECT 1
  FROM dfB
  WHERE dfA.DeptName = dfB.DeptName
)

такжеЛЕВЫЙ ВНЕШНИЙ СОЕДИНИТЕЛЬНЫЙ эквивалент

SELECT * 
FROM dfA
LEFT OUTER JOIN DFB
  ON dfA.DeptName = dfB.DeptName
where dfB.DeptName IS NULL;
...