gpt4 book ai didi

apache-spark - pyspark fillna 不适用于 ArrayType 列

转载 作者:行者123 更新时间:2023-12-05 01:27:16 28 4
gpt4 key购买 nike

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

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

我必须从所有列中删除空值。 “性别”列是字符串类型,而“arr”列是数组类型。一些值是 null 是两列。当我应用 fillna 函数时,值会从 gender 列中删除,但不会从 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 数据类型,其他数据类型的列将被忽略。

For example, if value is a string, and subset contains a non-string column, then the non-string column is simply ignored.(doc)

您可以使用 when 和 otherwise 构造替换数组列中的 null 值。

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()

关于apache-spark - pyspark fillna 不适用于 ArrayType 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69477151/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com