PySpark中withColumn多条件过滤报错的解决办法咨询
解决PySpark when子句多条件逻辑的错误问题
嘿,我来帮你搞定这个问题!你遇到的错误是因为运算符优先级在搞鬼——PySpark里的位运算符|优先级比比较运算符(<、>)高,所以你的代码会被错误解析,导致Spark找不到对应的方法。
给你两种简单的解决办法:
方法1:给每个条件加括号
把每个比较条件用括号包裹,确保逻辑判断的顺序正确:
import pyspark.sql.functions as F from pyspark.sql.functions import col df2 = df.withColumn( "VALUE", F.when((col('DIFF') < -900000) | (col('DIFF') > 900000), None).otherwise(col('VALUE')) )
方法2:使用F.or_()函数(可读性更好)
如果你觉得用|容易搞混,PySpark提供了专门的逻辑或函数F.or_(),写法更直观:
import pyspark.sql.functions as F from pyspark.sql.functions import col df2 = df.withColumn( "VALUE", F.when(F.or_(col('DIFF') < -900000, col('DIFF') > 900000), None).otherwise(col('VALUE')) )
另外补充一点:你写的None在PySpark里是合法的,用来生成null值,不过如果想要更明确,也可以写成F.lit(None),效果是一样的。
内容的提问来源于stack exchange,提问作者JA_DATA
相关产品推荐
相关产品推荐

