问题描述
我有一个带有数组列(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]|
+-----+