python - 为什么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|
+-----+
有谁知道为什么以及如何解决这个问题?
解决方案
布尔列的 Fillna 是在 Spark 2.3.0 中引入的。我想你使用的是旧版本的 Spark,它还不支持 Boolean 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)))
推荐阅读
- perl - 使用 Perl 通过 G Suite 发送电子邮件
- google-sheets - 如何限制 gsheet 单元格范围可以采用的某些颜色?
- apache - URL 重写 - Prestashop
- ajax - 如何在 Chrome 开发人员工具中捕获特定的 AJAX (XHR) 事件?
- jquery - 如何使用 Ajax Jquery 并返回 View?
- sql - 在没有 Group by 的情况下执行聚合函数
- json - CSV 到 JSON,带有 Ruby 的换行符
- sql - 每行中 300 个非空列的计数
- project-reactor - reactor.core.Exceptions$OverflowException:由于缺少请求而无法交付价值
- javascript - 如何使用 Wistia API 为视频创建定时按钮