pyspark fillna 不适用于 ArrayType 列

2023-12-03

我有一个 Spark 集群版本 3.1.2。我有以下输入数据

+-------+------+------------+
|   name|gender|         arr|
+-------+------+------------+
|  James|     M|     [60000]|
|Michael|     M| [70000, 31]|
| Robert|  null|[44, 400000]|
|  Maria|     F|[500000, 12]|
|    Jen|      |        null|
+-------+------+------------+

我必须从所有列中删除空值。 “gender”列是 StringType,而“arr”列是 ArrayType。两列中的某些值均为空。当我应用 fillna 函数时,值将从性别列中删除,但不会从 arr 列中删除。看看输出

>>> df.fillna("").show()
+-------+------+------------+
|   name|gender|         arr|
+-------+------+------------+
|  James|     M|     [60000]|
|Michael|     M| [70000, 31]|
| Robert|      |[44, 400000]|
|  Maria|     F|[500000, 12]|
|    Jen|      |        null|
+-------+------+------------+

如果我使用 na.drop 或 na.fill 函数,也会发生同样的情况。哪里有问题 ?如何从 arr 列中删除 null


fillna只支持int, float, string, bool数据类型,具有其他数据类型的列将被忽略。

例如,如果值是字符串,并且子集包含非字符串列,则该非字符串列将被忽略。(doc)

您可以更换null数组列中的值使用when and otherwise结构体。

import pyspark.sql.functions as F
default_value = F.array().cast("array<int>")
fill_rule = F.when(F.col('arr').isNull(),default_value).otherwise(F.col('arr'))
df.withColumn('arr', fill_rule).show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pyspark fillna 不适用于 ArrayType 列 的相关文章

随机推荐