OUTER和EX之间有区别吗? Spark SQL中的FULL_OUTER?

时间:2017-10-02 09:37:39

标签: apache-spark apache-spark-sql spark-dataframe

Spark SQL文档指定join()支持以下连接类型:

  

必须是以下之一:内部,十字架,外部,全部,全部,左,   left_outer,right,right_outer,left_semi和left_anti。

Spark SQL Join()

outerfull_outer之间有什么区别吗?我怀疑没有,我怀疑他们只是对方的同义词,但想要明白。

2 个答案:

答案 0 :(得分:1)

outerfull_outer之间没有区别-它们是相同的。请参见以下答案以进行演示:What are the various join types in Spark?

答案 1 :(得分:1)

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真正支持:内部,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加入

+----+-----+----+-----+
|  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|
+----+-----+----+-----+