PySpark使用startswith取反过滤MAC地址失效如何解决
正确实现代码
最简洁的写法是使用PySpark的取反运算符~直接对startswith返回的布尔条件取反:
import pyspark.sql.functions as f dffinal = df.filter(~f.col("mac_address").startswith("ZBB"))
如果需要显式写等于false的判断逻辑,要使用PySpark的字面量函数lit包裹布尔值,且注意Python的布尔常量首字母大写:
dffinal = df.filter(f.col("mac_address").startswith("ZBB") == f.lit(False))
原代码报错原因
===是Spark Scala API的专用相等判断运算符,Python版本的PySpark没有实现该运算符,所以会报符号无法识别。- 小写的
false是Scala的布尔常量,Python的布尔常量为大写的False,所以直接写== false会提示变量未定义,就算替换为== False也不推荐,直接用~取反更符合PySpark编码规范,可读性更高。
内容的提问来源于stack exchange,提问作者Martin Walczyński
相关产品推荐
相关产品推荐

