首页 > 解决方案 > 为什么pyspark fillna不填充布尔值

问题描述

我有一个带有布尔列的数据框,我想用 False 填充缺失的值。

但是,当我使用 fillna 方法时,什么也没有发生:

df = spark.createDataFrame([(True,), (True,), (None,), (None,)], ['col'])
df.fillna(False).show()

输出是

+----+
| col|
+----+
|true|
|true|
|null|
|null|
+----+

但是当我手动执行时,会填写以下值:

from pyspark.sql import functions as fn
df.withColumn("col", fn.when(fn.col("col").isNull(), False).otherwise(fn.col("col"))).show()

+-----+
|  col|
+-----+
| true|
| true|
|false|
|false|
+-----+

有谁知道为什么以及如何解决这个问题?

标签: pythonapache-sparkpysparkapache-spark-sqlfillna

解决方案


布尔列的 Fillna 是在 Spark 2.3.0 中引入的。我想你使用的是旧版本的 Spark,它还不支持 Boolean fillna。

分别查看Spark 2.2.0Spark 2.3.0的文档以检查差异。

修复的方法是升级您的 Spark 版本,或使用您的代码。另一种方法是使用coalesce,例如

import pyspark.sql.functions as F

df2 = df.withColumn("col", F.coalesce(F.col("col"), F.lit(False)))

推荐阅读