爆炸和爆炸外的区别

wer*_*ner 1 apache-spark apache-spark-sql

是什么区别爆炸explode_outer?这两个函数的文档是相同的,两个函数的示例也相同:

SELECT explode(array(10, 20));
 10
 20
Run Code Online (Sandbox Code Playgroud)

SELECT explode_outer(array(10, 20));
 10
 20
Run Code Online (Sandbox Code Playgroud)

火花源表明,有两个功能之间的差

expression[Explode]("explode"),
expressionGeneratorOuter[Explode]("explode_outer")
Run Code Online (Sandbox Code Playgroud)

但是与expression相比,expressionGeneratorOuter的效果是什么?

Shr*_*dha 9

explode通过忽略数组中的空值或空值,为数组或映射列中的每个元素创建一行,而explode_outer返回数组或映射中的所有值,包括空值或空值。

例如,对于以下数据帧-

id | name | likes
_______________________________
1  | Luke | [baseball, soccer]
2  | Lucy | null
Run Code Online (Sandbox Code Playgroud)

explode 给出以下输出 -

id | name | likes
_______________________________
1  | Luke | baseball
1  | Luke | soccer
Run Code Online (Sandbox Code Playgroud)

explode_outer给出以下输出 -

id | name | likes
_______________________________
1  | Luke | baseball
1  | Luke | soccer
2  | Lucy | null
Run Code Online (Sandbox Code Playgroud)
id | name | likes
_______________________________
1  | Luke | [baseball, soccer]
2  | Lucy | null
Run Code Online (Sandbox Code Playgroud)

返回

id | name | likes
_______________________________
1  | Luke | baseball
1  | Luke | soccer
Run Code Online (Sandbox Code Playgroud)

尽管

id | name | likes
_______________________________
1  | Luke | baseball
1  | Luke | soccer
2  | Lucy | null
Run Code Online (Sandbox Code Playgroud)

返回

SELECT explode(col1) from values (array(10,20)), (null)
Run Code Online (Sandbox Code Playgroud)