PySpark多条件下用其他列值替换指定列值的实现方法
PySpark DataFrame 替换Null值的正确实现
你的代码存在两个关键问题:
- PySpark中判断列是否为Null不能用
== None,必须使用列的isNull()方法,因为== None在Spark的分布式计算逻辑中无法正确识别Null值。 - 你的
when函数没有指定otherwise分支,这会导致不满足条件的行中col1被覆盖为Null,而不是保留原来的值。
正确的实现代码如下:
from pyspark.sql.functions import when df = df.withColumn( "col1", when( (df.col1.isNull()) & (df.col2 == df.col3), df.col4 ).otherwise(df.col1) # 不满足条件时保留原col1的值 )
代码说明
df.col1.isNull():正确判断col1是否为Null值&:用于连接两个布尔条件,注意需要用括号包裹每个条件保证运算优先级.otherwise(df.col1):确保当不满足替换条件时,col1保留原来的数值,避免被意外置空
内容的提问来源于stack exchange,提问作者user20986502
相关产品推荐
相关产品推荐

