DataFrame列数组类型包含Null值和空数组len = 0如何将Null转换为空数组?

问题描述

我有一个带有数组列(StringType)的Spark DataFrame

示例数据框:

df = spark.createDataFrame([
  [None],[[]],[['foo']] 
]).toDF("a")

当前输出:

+-----+
|    a|
+-----+
| null|
|   []|
|[foo]|
+-----+

所需的输出:

+-----+
|    a|
+-----+
|   []|
|   []|
|[foo]|
+-----+

我需要将Null值转换为空数组,以与另一个数组列连接。

已经尝试过了,但是没有用

df.withColumn("a",F.coalesce(F.col("a"),F.from_json(F.lit("[]"),T.ArrayType(T.StringType()))))

Convert null values to empty array in Spark DataFrame

解决方法

使用array函数。

df = spark.createDataFrame([
  [None],[[]],[['foo']] 
]).toDF("a")

import pyspark.sql.functions as F

df.withColumn('a',F.coalesce(F.col('a'),F.array(F.lit(None)))).show(10,False)
+-----+
|a    |
+-----+
|[]   |
|[]   |
|[foo]|
+-----+

现在的结果是array(string),因此没有空值。请检查结果。

temp = spark.sql("SELECT a FROM table WHERE a is NULL")
temp.show(10,False)
temp = spark.sql("SELECT a FROM table WHERE a = array(NULL)")
temp.show(10,False)
temp = spark.sql("SELECT a FROM table")
temp.show(10,False)


+---+
|a  |
+---+
+---+

+---+
|a  |
+---+
|[] |
+---+

+-----+
|a    |
+-----+
|[]   |
|[]   |
|[foo]|
+-----+

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...