PySpark过滤Company列含Microsoft记录无返回结果问题求助
问题核心原因
你使用的是Pandas风格的.str.contains字符串操作语法,PySpark原生DataFrame的Column对象不支持str访问器,所以匹配逻辑未生效,无法返回符合条件的结果。
正确实现方式
方法1:无需正则,直接模糊匹配(不区分大小写)
先将列内容统一转为小写/大写,再调用PySpark内置的contains方法匹配:
new_df = file_df.filter(file_df.Company.lower().contains('microsoft')) display(new_df)
方法2:使用正则匹配(不区分大小写)
如果需要正则匹配能力,使用PySpark内置的rlike方法,搭配正则不区分大小写标记(?i)实现:
new_df = file_df.filter(file_df.Company.rlike('(?i)microsoft')) display(new_df)
无结果排查方案
如果调整代码后仍无返回结果,按以下步骤排查:
- 确认
Company列名拼写完全正确,注意PySpark对列名大小写敏感 - 执行
file_df.select('Company').show(20, truncate=False)打印前20行数据,确认列中确实存在包含Microsoft的记录,排除内容前后带空格、夹杂特殊字符的情况 - 存在空格的场景可以先调用
trim方法去除首尾空白再匹配:
from pyspark.sql.functions import trim new_df = file_df.filter(trim(file_df.Company).lower().contains('microsoft')) display(new_df)
内容的提问来源于stack exchange,提问作者abhinav singh
相关产品推荐
相关产品推荐

