我有一个带有布尔列的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|
+-----+
有人知道为什么以及如何解决这个问题吗?
1条答案
按热度按时间sirbozc51#
spark2.3.0中引入了布尔列的fillna。我想您使用的是旧版本的spark,它还不支持布尔fillna。
请分别参阅spark 2.2.0和spark 2.3.0的文档以检查差异。
修复的方法是升级spark版本,或者使用代码。另一种方法是使用
coalesce
,例如。