从 PySpark 数组中删除 NULL 项

问题描述 投票:0回答:3

如何删除

array(1, 2, null, 3, null)
中的空项? 当我们想要删除
array_remove
项目时,使用
null
函数没有帮助。

arrays apache-spark pyspark apache-spark-sql null
3个回答
3
投票

我使用了以下技巧,使用

array_except()
函数:

SELECT array_except(array(1, 2, null, 3, null), array(null))
返回
[1,2,3]


1
投票

星火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]|
# +---------+

0
投票

已经接受了答案,但我为使用 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]
© www.soinside.com 2019 - 2024. All rights reserved.