如何通过 运行 左右外连接合并数据框中的两列
How do I merge two columns in a dataframe by running both a left and right outer join
我有两个 table,每个有 2 列,一个 id 列和一个 income 列。我使用完整的外部联接加入了两个 tables,执行以下操作:
val income = incomeA.join(incomeB, incomeA("idA") === incomeB("idB"), "full")
结果如下:
+--------------------+----------+--------------------+----------+
| idA | A_INCOME| idB | B_INCOME|
+--------------------+----------+--------------------+----------+
|0d4f671c-552b-449...| 2250| null| null|
|9e03f92e-af0e-416...| 1250| null| null|
| null| null|c75d0d17-f3c1-497...| 4300|
|02572d79-bc54-427...| 2880| null| null|
| null| null|ca493eca-0709-4db...| 2320|
|cb7831ac-2550-435...| 1650| null| null|
|da7ac4c4-403b-466...| 2250| null| null|
|9bddb7b5-0047-4e1...| 5170| null| null|
| null| null|b54fc648-5f00-411...| 800|
|7aeade0a-47d4-459...| 4250| null| null|
|4fde8deb-a7de-45a...| 1650| null| null|
+--------------------+----------+--------------------+----------+
但我希望最终结果包含 3 列,而不是上面的列,一个包含 idA 和 idB 的 id 列以及两个 income 列,如下所示:
+--------------------+----------+----------+
| id | A_INCOME| B_INCOME|
+--------------------+----------+----------+
|0d4f671c-552b-449...| 2250| null|
|9e03f92e-af0e-416...| 1250| null|
|c75d0d17-f3c1-497...| null| 4300|
|02572d79-bc54-427...| 2880| null|
|ca493eca-0709-4db...| null| 2320|
|cb7831ac-2550-435...| 1650| null|
|da7ac4c4-403b-466...| 2250| null|
|9bddb7b5-0047-4e1...| 5170| null|
|b54fc648-5f00-411...| null| 800|
|7aeade0a-47d4-459...| 4250| null|
|4fde8deb-a7de-45a...| 1650| null|
+--------------------+----------+----------+
table 本质上应该是在该数据帧上进行完全左连接和完全右连接的结果。有没有办法做到这一点?你会如何处理这个问题?非常感谢!
我想你只是想要 coalesce()
:
select coalesce(a.id, b.id) as id, a.income as a_income, b.income a b_income
from a full join
b
on a.id = b.id;
大多数数据库支持标准 USING
语法,因此您也可以使用:
select id, a.income as a_income, b.income a b_income
from a full join
b
using (id);
我有两个 table,每个有 2 列,一个 id 列和一个 income 列。我使用完整的外部联接加入了两个 tables,执行以下操作:
val income = incomeA.join(incomeB, incomeA("idA") === incomeB("idB"), "full")
结果如下:
+--------------------+----------+--------------------+----------+
| idA | A_INCOME| idB | B_INCOME|
+--------------------+----------+--------------------+----------+
|0d4f671c-552b-449...| 2250| null| null|
|9e03f92e-af0e-416...| 1250| null| null|
| null| null|c75d0d17-f3c1-497...| 4300|
|02572d79-bc54-427...| 2880| null| null|
| null| null|ca493eca-0709-4db...| 2320|
|cb7831ac-2550-435...| 1650| null| null|
|da7ac4c4-403b-466...| 2250| null| null|
|9bddb7b5-0047-4e1...| 5170| null| null|
| null| null|b54fc648-5f00-411...| 800|
|7aeade0a-47d4-459...| 4250| null| null|
|4fde8deb-a7de-45a...| 1650| null| null|
+--------------------+----------+--------------------+----------+
但我希望最终结果包含 3 列,而不是上面的列,一个包含 idA 和 idB 的 id 列以及两个 income 列,如下所示:
+--------------------+----------+----------+
| id | A_INCOME| B_INCOME|
+--------------------+----------+----------+
|0d4f671c-552b-449...| 2250| null|
|9e03f92e-af0e-416...| 1250| null|
|c75d0d17-f3c1-497...| null| 4300|
|02572d79-bc54-427...| 2880| null|
|ca493eca-0709-4db...| null| 2320|
|cb7831ac-2550-435...| 1650| null|
|da7ac4c4-403b-466...| 2250| null|
|9bddb7b5-0047-4e1...| 5170| null|
|b54fc648-5f00-411...| null| 800|
|7aeade0a-47d4-459...| 4250| null|
|4fde8deb-a7de-45a...| 1650| null|
+--------------------+----------+----------+
table 本质上应该是在该数据帧上进行完全左连接和完全右连接的结果。有没有办法做到这一点?你会如何处理这个问题?非常感谢!
我想你只是想要 coalesce()
:
select coalesce(a.id, b.id) as id, a.income as a_income, b.income a b_income
from a full join
b
on a.id = b.id;
大多数数据库支持标准 USING
语法,因此您也可以使用:
select id, a.income as a_income, b.income a b_income
from a full join
b
using (id);