Как создать выражение соединения из списка ключей соединения - PullRequest
0 голосов
/ 25 сентября 2019

Эксперты, у меня есть список столбцов, которые мне нужно использовать для выражения соединения при объединении двух фреймов данных Pyspark (1.6) (я не могу жестко закодировать этот список в моем выражении соединения, поскольку оно является частью общего кода).У меня есть эти 2 dataframes-

>>> df.show()
+---------+---------+------+
|column1  |column2  |column3|
+---------+---------+------+
|     abcd|      xyz|   12A|
|    abcd1|      xyz|   12A|
+---------+---------+------+

>>> df1.show()
+---------+---------+------+
|column1  |column2  |column3|
+---------+---------+------+
|    abcd1|      xyz|   12A|
+---------+---------+------+

Я делаю левое соединение, и я хочу только записи, которые присутствуют только в "df".

Столбцы, чтобы присоединиться на-

joinCols = ['column1','column2','column3']

Join Expression-

>>> df.join(df1,joinCols,"left").show()
+---------+---------+------+
|column1  |column2  |column3|
+---------+---------+------+
|    abcd1|      xyz|   12A|
|     abcd|      xyz|   12A|
+---------+---------+------+

Теперь это соединение работает файл, без проблем.Но я ищу только одну запись в выводе.

|     abcd|      xyz|   12A|

Поскольку соединение по умолчанию отбрасывает столбцы из другого фрейма данных "df1", я не могу поставить условие над выражением соединения выше.Я попытался -

df.join(df1,joinCols,"left").filter(isnull(df1["column1"])).show()

Это выше ошибки, потому что у него нет столбца в выходных данных для применения выражения фильтра.Есть предложения?

1 Ответ

1 голос
/ 25 сентября 2019

Поскольку вы используете Spark v1.6, вам необходимо выполнить join с параметром how="leftsemi" (Till Spark v2.1).В Spark v2.2 у вас есть left_semi.

Более подробное объяснение левого полусоединения можно найти по адресу: Разница между INNER JOIN и LEFT SEMI JOIN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...