HMS*_*HMS 3 apache-spark apache-spark-sql pyspark
我有一个 Spark 集群版本 3.1.2。我有以下输入数据
+-------+------+------------+
| name|gender| arr|
+-------+------+------------+
| James| M| [60000]|
|Michael| M| [70000, 31]|
| Robert| null|[44, 400000]|
| Maria| F|[500000, 12]|
| Jen| | null|
+-------+------+------------+
Run Code Online (Sandbox Code Playgroud)
我必须从所有列中删除空值。“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|
+-------+------+------------+
Run Code Online (Sandbox Code Playgroud)
如果我使用 na.drop 或 na.fill 函数,也会发生同样的情况。哪里有问题 ?如何从 arr 列中删除 null
fillna仅支持int, float, string, bool数据类型,其他数据类型的列将被忽略。
例如,如果值是字符串,并且子集包含非字符串列,则该非字符串列将被忽略。(文档)
您可以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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1785 次 |
| 最近记录: |