Spark中na.fill()函数仅填充city列空值无法全量生效问题咨询

问题原因
Spark的na.fill()方法存在类型匹配规则:仅会对和填充值数据类型一致的列的空值进行替换,你传入的填充值为字符串类型的'*****',因此只有字符串类型的列的空值会被处理,非字符串类型(如整型、浮点型、日期型等)的空值会被直接跳过。你场景中仅city列为字符串类型,所以只有该列的空值被成功替换。
解决方案
方案1:按列类型分别填充
如果需要保留各列原有数据类型,可以根据不同列的类型指定对应类型的填充值,分批次执行填充操作:
- 先执行
data.printSchema()确认所有列的字段类型 - 按类型分组填充,示例代码如下:
# 字符串类型列统一填充为***** filled_df = data.na.fill("*****", subset=["city", "其他字符串列名"]) # 整型列统一填充为0(可根据业务需求替换为其他整型值) filled_df = filled_df.na.fill(0, subset=["整型列名1", "整型列名2"]) # 浮点型列统一填充为0.0(可根据业务需求替换为其他浮点型值) filled_df = filled_df.na.fill(0.0, subset=["浮点型列名1", "浮点型列名2"]) filled_df.show()
方案2:统一转为字符串类型后填充
如果不需要保留原列数据类型,想要所有列都填充'*****',可以先将所有列转换为字符串类型后再统一填充:
from pyspark.sql.functions import col # 所有字段转换为字符串类型 str_df = data.select([col(c).cast("string").alias(c) for c in data.columns]) # 统一填充空值 str_df.na.fill("*****").show()
内容的提问来源于stack exchange,提问作者Pratham Dave
相关产品推荐
相关产品推荐

