explode和explode的区别

mgdq6dx1  于 2021-05-19  发布在  Spark
关注(0)|答案(1)|浏览(1385)

explode和explode\u outer有什么区别?两个函数的文档相同,两个函数的示例也相同:

SELECT explode(array(10, 20));
 10
 20

SELECT explode_outer(array(10, 20));
 10
 20

Spark源表明这两种功能有区别

expression[Explode]("explode"),
expressionGeneratorOuter[Explode]("explode_outer")

但是expressiongeneratorouter与expression相比有什么效果呢?

wlp8pajw

wlp8pajw1#

explode 通过忽略数组中的null或空值,为数组或Map列中的每个元素创建一行 explode_outer 返回数组或Map中的所有值,包括null或空。
例如,对于以下Dataframe-

id | name | likes
_______________________________
1  | Luke | [baseball, soccer]
2  | Lucy | null
``` `explode` 提供以下输出-

id | name | likes


1 | Luke | baseball
1 | Luke | soccer

鉴于 `explode_outer` 提供以下输出-

id | name | likes


1 | Luke | baseball
1 | Luke | soccer
2 | Lucy | null

SELECT explode(col1) from values (array(10,20)), (null)

退货

+---+
|col|
+---+
| 10|
| 20|
+---+

虽然

SELECT explode_outer(col1) from values (array(10,20)), (null)

退货

+----+
| col|
+----+
| 10|
| 20|
|null|
+----+

相关问题