【问题标题】:SQL query/Spark dataframe to outer join and subtract values of two tablesSQL 查询/Spark 数据框外连接和减去两个表的值
【发布时间】:2018-03-03 13:04:02
【问题描述】:
我希望根据“名称”对两个表 A 和 B 进行外部联接,然后减去列“计数”值,如果该行在另一个表中不存在,则替换为 0。有谁知道一个简单的 SQL 查询来实现这一点?
A
name count
ABC 10
DEF 10
GHI 20
B
name count
ABC 20
GHI 30
XYZ 10
RESULT
name count
ABC -10
DEF 10
GHI -10
XYZ -10
谢谢!
(或者如果有办法使用 Spark DataFrames 也可以做到这一点!)
【问题讨论】:
标签:
mysql
sql
apache-spark
dataframe
apache-spark-sql
【解决方案1】:
使用spark,您可以连接name 列上的两个数据框,coalescenull 计数为零,然后用B.count 减去A.count:
(A.alias("a").join(B.alias("b"), Seq("name"), "outer")
.selectExpr("name", "coalesce(a.count, 0) - coalesce(b.count, 0) as count")).show
+----+-----+
|name|count|
+----+-----+
| DEF| 10|
| GHI| -10|
| XYZ| -10|
| ABC| -10|
+----+-----+