将空数组转换为null pyspark
我有一个pyspark数据帧: 数据帧示例:将空数组转换为null pyspark,pyspark,apache-spark-sql,Pyspark,Apache Spark Sql,我有一个pyspark数据帧: 数据帧示例: id | column_1 | column_2 | column_3 -------------------------------------------- 1 | ["12"] | ["""] | ["67"] -------------------------------------------- 2 | ["""] | ["78"] | ["90"
id | column_1 | column_2 | column_3
--------------------------------------------
1 | ["12"] | ["""] | ["67"]
--------------------------------------------
2 | ["""] | ["78"] | ["90"]
--------------------------------------------
3 | ["""] | ["93"] | ["56"]
--------------------------------------------
4 | ["100"] | ["78"] | ["90"]
--------------------------------------------
我想将以下列的所有值[“”]
转换为null:列1、列2、列3
调查结果:
id | column_1 | column_2 | column_3
--------------------------------------------
1 | ["12"] | null | ["67"]
--------------------------------------------
2 | null | ["78"] | ["90"]
--------------------------------------------
3 | null | ["93"] | ["56"]
--------------------------------------------
4 | ["100"] | ["78"] | ["90"]
--------------------------------------------
我尝试了以下解决方案:
df = df.withColumn(
"column_1",
F.when((F.size(F.col("column_1")) == ""),
F.lit(None)).otherwise(F.col("column_1"))
).withColumn(
"column_2",
F.when((F.size(F.col("column_2")) == ""),
F.lit(None)).otherwise(F.col("column_2"))
).withColumn(
"column_3",
F.when((F.size(F.col("column_3")) == ""),
F.lit(None)).otherwise(F.col("column_3"))
)
但它会将所有内容转换为null。
如何在包含空字符串的空数组上进行测试通常是[“”]而不是[]。
谢谢您可以在时使用
进行测试并替换以下值:
df.withColumn(
“第1栏”,
F.when(F.col(“column_1”)!=F.array(F.lit(“”)、#或“”)?
F.col(“第1列”)
))
对每个列执行此操作。您可以在
时使用进行测试,并替换以下值:
df.withColumn(
“第1栏”,
F.when(F.col(“column_1”)!=F.array(F.lit(“”)、#或“”)?
F.col(“第1列”)
))
对每个列都这样做。数组总是只包含一个值?有时包含多个值。但我只放了一个example@Steven我在代码中也使用column>0进行了测试,但它将所有值都更改为null哪个版本的spark?数组始终只包含1个值?有时包含多个值。但我只添加了一个example@Steven我测试了我我的代码也使用column>0,但它将所有内容都更改为空,spark的哪个版本?