我是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。但是我找不到关于为什么删除该行的正确解释。
答案 0 :(得分:2)
这是爆炸API的行为。如果要获得所需的输出,请使用explode_outer
df.withColumn("age",explode_outer(col("age")))