You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 14:33:12