首页 > 解决方案 > 如何根据复杂条件加入2个数据框

问题描述

我有2个数据框:

A :

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

乙:

+-------------+----------+-------------------+
| 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 获得休息。我不确定我需要什么样的连接。有人可以建议我任何想法吗?

标签: sqlscalaapache-sparkdataframejoin

解决方案


只是想看看我是否正确理解了这一点。您想加入产品、名称和标题上的框架,但只保留数据存在于 A 中的框架。如果是这样,您可以尝试:

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


推荐阅读