PySpark使用endswith多条件过滤列值问题求助
正确实现PySpark筛选itemName以指定后缀结尾的行
错误原因分析
你写的错误语句逻辑完全不对:table.itemName == itemName.endswith("min")是把字符串列和布尔值做相等判断——endswith()返回的是布尔类型列(每行对应True/False),而table.itemName是字符串列,两者根本无法匹配,所以自然返回空结果。
正确写法示例
假设你的DataFrame名为table,以下几种写法都能实现需求:
写法1:直接组合两个endswith条件
table.filter(table.itemName.endswith("min") | table.itemName.endswith("pressure"))
逻辑:对itemName列分别调用endswith()得到两个布尔列,再用|(逻辑或)组合后传入filter。
写法2:用col函数简化列引用(需先导入col)
from pyspark.sql.functions import col table.filter(col("itemName").endswith("min") | col("itemName").endswith("pressure"))
这种写法在列名较长或动态引用列时更便捷。
写法3:正则表达式批量匹配后缀
如果需要匹配的后缀较多,用正则会更简洁:
table.filter(table.itemName.rlike("(min|pressure)$"))
其中$表示匹配字符串结尾,(min|pressure)表示匹配任意一个指定后缀。
结果说明
执行上述任意写法后,就能得到所有itemName以"min"或"pressure"结尾的行,保留原表的itemName和itemValue列。
内容的提问来源于stack exchange,提问作者MMV
相关产品推荐
相关产品推荐

