PySpark替换000与null为UNDEFINED时原有数据变null如何解决
问题根因
你使用的PySpark when 函数仅定义了条件匹配时的返回值,未指定条件不匹配时的返回规则,因此所有不满足等于000或为null的有效值都会被默认赋值为null。
正确实现方式
方案1:使用when + otherwise(逻辑最直观)
首先确保已导入需要的函数:
from pyspark.sql.functions import col, when, lit
修改后的处理代码如下:
lastvalue_month = lastvalue_month.withColumn( 'province', # 满足条件时替换为UNDEFINED when((col('province') == '000') | col('province').isNull(), lit('UNDEFINED')) # 不满足条件时保留原有值 .otherwise(col('province')) )
方案2:使用PySpark内置NA处理方法
你也可以拆分两步处理,逻辑更易读:
lastvalue_month = lastvalue_month \ # 先将null替换为UNDEFINED .na.fill('UNDEFINED', subset=['province']) \ # 再将000替换为UNDEFINED .replace('000', 'UNDEFINED', subset=['province'])
两种方案均可以实现仅替换000和null为UNDEFINED,同时保留其他原有有效值的需求。
内容的提问来源于stack exchange,提问作者Nabih Bawazir
相关产品推荐
相关产品推荐

