Как объединить 2 кадра данных на основе сложных условий - PullRequest
0 голосов
/ 06 марта 2019

У меня есть 2 фрейма данных:

A:

+----------+------+-------------+-------------+
|title     |name  |product      |available    |
+----------+------+-------------+-------------+
|AAAAA     |WW    |indoor camera|true         |
|A121AA    |AA    |indoor camera|true         |
|AACCCA    |YY    |indoor camera|true         |
+----------+------+-------------+-------------+

B:

+-------------+----------+-------------------+
| product     | title    | name              |
+-------------+----------+-------------------+
|indoor camera|FFFFF     |WW                 |
|indoor camera|F1FFF     |WW                 |
|indoor camera|FYFFF     |YY                 |
|indoor camera|BBB       |MNMN               |
|indoor camera|CCC       |MNMN               |
|indoor camera|DDD       |BBBNNN             |
+-------------+----------+-------------------+

Мне нужно получить объединенные данные, которые выглядят как:

+----------+------+-------------+-------------+
|title     |name  |product      |available    |
+----------+------+-------------+-------------+
|AAAAA     |WW    |indoor camera|true         |
|AACCCA    |YY    |indoor camera|true         |
|A121AA    |AA    |indoor camera|true         |
|BBB       |MNMN  |indoor camera|null         |
|CCC       |MNMN  |indoor camera|null         |
|DDD       |BBBNNN|indoor camera|null         |
+----------+------+-------------+-------------+

Я хотел бы присоединиться на основе «продукта» и получить объединенные данные.Если «имя» находится в A, тогда конечные объединенные данные должны иметь название для A (только например, WW) для этого имени и получать отдых от B. Я не уверен, какой тип соединения мне нужен для этого.Может кто-нибудь предложить мне какие-нибудь идеи?

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Просто чтобы понять, правильно ли я это понял.Вы хотите объединить фреймы как Product, name и title, но сохранить только те, где данные существуют в A. Если это так, вы можете попробовать:

a.join(b, on=['product', 'name', 'title'], how='left').show()

0 голосов
/ 06 марта 2019

Использовать полное соединение

a.join(b, ['title'], how='full').show()

Или объединить два столбца таблицы

import pyspark.sql.functions as F
a.join(b, a.title == b.title , how='full').select(
    F.coalesce(a.title , b.title ).alias('title'), a.name , a.product,a.available
).show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...