PySpark when条件语句报错求助:ValueError无法转换列为布尔值
PySpark条件语句报错分析与修复
报错原因
- 运算符优先级问题:
&的优先级高于==,原代码里的表达式会被错误解析为df.first_name == (df2.firstname & df.last_namne) == df2.lastname,Spark会尝试把列对象转为布尔值,从而触发ValueError。 - 拼写错误:代码里的
last_namne是笔误,正确字段名应为last_name。
修复后的代码
给每个比较条件单独加括号,确保逻辑判断顺序正确,同时修正拼写错误:
df_1 = df.withColumn( "test", when( (df.first_name == df2.firstname) & (df.last_name == df2.lastname), "1. Match on First and Last Name" ).otherwise("No Match") )
可选写法
如果觉得&加括号容易出错,也可以用pyspark.sql.functions提供的and_函数来实现逻辑与:
from pyspark.sql.functions import and_ df_1 = df.withColumn( "test", when( and_(df.first_name == df2.firstname, df.last_name == df2.lastname), "1. Match on First and Last Name" ).otherwise("No Match") )
内容的提问来源于stack exchange,提问作者dnf999
相关产品推荐
相关产品推荐

