空列的火花爆炸返回空行

时间:2018-09-19 17:41:41

标签: apache-spark apache-spark-sql

我是Spark编程的新手。我正在尝试用空行爆炸DataFrame的列。我以为爆炸功能很简单,可以为数组中的每个元素创建额外的行。但是结果却不同。

我无法理解爆炸的DataFrame背后的逻辑。 有人可以解释以下示例。 我想了解此结果的基本原理/原因。 为什么在数据帧中将空数组视为空?

//inputDataFrame
+---+------+----------+
|age|  name|occupation|
+---+------+----------+
| []|Harish| developer|
+---+------+----------+

df.withColumn("age",explode(col("age")))

//DataFrame with age column exploded
+---+----+----------+
|age|name|occupation|
+---+----+----------+
+---+----+----------+

// expected DataFrame
    +---+------+----------+     +----+------+----------+
    |age|  name|occupation|     |age |  name|occupation|
    +---+------+----------+ (or)+----+------+----------+
    |   |Harish| developer|     |null|Harish| developer|
    +---+------+----------+     +----+------+----------+

EDIT1:按照Chandan的说法,我发现了这个堆栈问题the documentation并且可以理解spark2可用的explode API。但是我找不到关于为什么删除该行的正确解释。

1 个答案:

答案 0 :(得分:2)

这是爆炸API的行为。如果要获得所需的输出,请使用explode_outer

df.withColumn("age",explode_outer(col("age")))