如何删除
array(1, 2, null, 3, null)
中的空项?
当我们想要删除 array_remove
项目时,使用 null
函数没有帮助。
我使用了以下技巧,使用
array_except()
函数:
SELECT array_except(array(1, 2, null, 3, null), array(null))
返回[1,2,3]
星火3.4+
F.array_compact("col_name")
array_compact
不会删除重复项。
完整示例:
from pyspark.sql import functions as F
df = spark.createDataFrame([([1, 2, None, 3, None],)], ["c"])
df.show(truncate=0)
# +---------------------+
# |c |
# +---------------------+
# |[1, 2, null, 3, null]|
# +---------------------+
df = df.withColumn("c", F.array_compact("c"))
df.show()
# +---------+
# | c|
# +---------+
# |[1, 2, 3]|
# +---------+
已经接受了答案,但我为使用 java 的人留下了答案。
可以用
array_compact
org.apache.spark.sql.functions.array_compact 来完成
但这是从spark 3.4.0开始提供的。
我从评论中获取它,谢谢@HarlanNelson
# I have a text column; col(values) = "1.1,2,,,,,3.5, 4.1"
.withColumn("values_array", filter(split(col("values"), ",").cast("array<float>"), x -> x.isNotNull()))
# [1.1, 2, 3.5, 4.1]