如何通过 运行 左右外连接合并数据框中的两列

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);