Sql 如何通过运行左和右外部联接来合并数据帧中的两列
我有两个表,每个表有两列,一个id列和一个收入列。我已使用完全外部联接连接了这两个表,并执行了以下操作:Sql 如何通过运行左和右外部联接来合并数据帧中的两列,sql,scala,apache-spark,aws-glue,Sql,Scala,Apache Spark,Aws Glue,我有两个表,每个表有两列,一个id列和一个收入列。我已使用完全外部联接连接了这两个表,并执行了以下操作: val income = incomeA.join(incomeB, incomeA("idA") === incomeB("idB"), "full") 产生以下集合: +--------------------+----------+--------------------+----------+ | idA | A_INCOME| idB
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列,一个id列同时包含idA和idB,两个收入列,而不是上述内容,如下所示:
+--------------------+----------+----------+
| 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|
+--------------------+----------+----------+
该表本质上应该是在该数据帧上执行完全左连接和完全右连接的结果。有没有办法做到这一点?你将如何处理这个问题?非常感谢 我想您只需要
合并()
:
大多数数据库支持标准的语法,因此您也可以使用:
select id, a.income as a_income, b.income a b_income
from a full join
b
using (id);
我想您只需要coalesce()
:
大多数数据库支持标准的语法,因此您也可以使用:
select id, a.income as a_income, b.income a b_income
from a full join
b
using (id);
我删除了MySQL标签。它不支持完全连接
,因此您不能使用该数据库。我删除了MySQL标记。它不支持完全连接
,因此您不能使用该数据库。太好了,非常感谢!成功了!对任何感兴趣的人来说,这就是我对上述fo spark所做的修改:incomeA.join(…).select(coalesce(incomeA(“idA”)、incomeB(“idB”)、as(“accountId”)、col(“A_INCOME”)、col(“B_INCOME”))
太好了,非常感谢!成功了!对任何感兴趣的人来说,这就是我所做的调整上述fo spark:incomeA.join(…).select(coalesce(incomeA(“idA”)、incomeB(“idB”)、as(“accountId”)、col(“A_INCOME”)、col(“B_INCOME”))