Spark SQL 中的 OUTER 和 FULL OUTER 有区别吗?
Posted
技术标签:
【中文标题】Spark SQL 中的 OUTER 和 FULL OUTER 有区别吗?【英文标题】:Is there a difference between OUTER & FULL_OUTER in Spark SQL? 【发布时间】:2017-10-02 09:37:38 【问题描述】:Spark SQL 文档指定 join()
支持以下连接类型:
必须是以下之一:inner、cross、outer、full、full_outer、left、 left_outer、right、right_outer、left_semi 和 left_anti。
Spark SQL Join()
outer
和 full_outer
有什么区别吗?我怀疑不是,我怀疑它们只是彼此的同义词,但想弄清楚。
【问题讨论】:
【参考方案1】:outer
和 full_outer
之间没有区别 - 它们是相同的。请参阅以下答案进行演示:What are the various join types in Spark?
【讨论】:
【参考方案2】:Spark v2.4.0 加入代码(_ 已被抑制):
case "inner" => Inner
case "outer" | "full" | "fullouter" => FullOuter
case "leftouter" | "left" => LeftOuter
case "rightouter" | "right" => RightOuter
case "leftsemi" => LeftSemi
case "leftanti" => LeftAnti
case "cross" => Cross
所以 Spark 确实支持:Inner、FullOuter、LeftOuter、RightOuter、LeftSemi、LeftAnti 和 Cross。
简单的例子,给出:
+---+-----+
| id|value|
+---+-----+
| 1| A1|
| 2| A2|
| 3| A3|
| 4| A4|
+---+-----+
和:
+---+-----+
| id|value|
+---+-----+
| 3| A3|
| 4| A4|
| 4| A4_1|
| 5| A5|
| 6| A6|
+---+-----+
你得到:
外连接
+----+-----+----+-----+
| id|value| id|value|
+----+-----+----+-----+
|null| null| 5| A5|
|null| null| 6| A6|
| 1| A1|null| null|
| 2| A2|null| null|
| 3| A3| 3| A3|
| 4| A4| 4| A4|
| 4| A4| 4| A4_1|
+----+-----+----+-----+
FULL_OUTER JOIN
+----+-----+----+-----+
| id|value| id|value|
+----+-----+----+-----+
|null| null| 5| A5|
|null| null| 6| A6|
| 1| A1|null| null|
| 2| A2|null| null|
| 3| A3| 3| A3|
| 4| A4| 4| A4|
| 4| A4| 4| A4_1|
+----+-----+----+-----+
【讨论】:
以上是关于Spark SQL 中的 OUTER 和 FULL OUTER 有区别吗?的主要内容,如果未能解决你的问题,请参考以下文章