PySpark是否有类似isin且返回布尔值的函数?表达式报错如何修复
问题解答
首先明确:isin本身就会返回布尔类型的Column对象,完全满足你的需求,不需要替换它。你遇到的报错是Python运算符优先级导致的Spark解析错误。
错误原因
在Python中,方法调用(比如.isin())的优先级高于&运算符,但Spark在解析时错误地将isin的参数和后面的条件非法结合,导致类型不匹配——字符串VAL1和布尔条件COL2=1无法执行逻辑与操作。
解决方法
给每个条件表达式单独加括号,明确分组逻辑即可:
F.when( (F.col("COL1").isin("VAL1", "VAL2")) & (F.col("COL2") == 1), F.col("SOMECOL") )
可选替代写法
如果想换一种类似isin的布尔判断方式,也可以用array_contains实现:
F.when( F.array_contains(F.array("VAL1", "VAL2"), F.col("COL1")) & (F.col("COL2") == 1), F.col("SOMECOL") )
不过这种写法不如isin直观,优先推荐第一种修复方案。
内容的提问来源于stack exchange,提问作者chugaister
相关产品推荐
相关产品推荐

