为什么pyspark fillna不填充布尔值

vbkedwbf  于 2021-07-12  发布在  Spark
关注(0)|答案(1)|浏览(295)

我有一个带有布尔列的Dataframe,我想用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|
+-----+

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

sirbozc5

sirbozc51#

spark2.3.0中引入了布尔列的fillna。我想您使用的是旧版本的spark,它还不支持布尔fillna。
请分别参阅spark 2.2.0和spark 2.3.0的文档以检查差异。
修复的方法是升级spark版本,或者使用代码。另一种方法是使用 coalesce ,例如。

import pyspark.sql.functions as F

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

相关问题