PySpark是否有替代SQL LIKE的函数?及DataFrame列批量处理需求
PySpark替代LIKE的函数及列名处理方案
一、替代SQL LIKE的PySpark函数
PySpark提供了多个函数实现类似SQL LIKE的匹配逻辑,常用的有以下几种:
like()方法:和SQL LIKE语法完全兼容,支持%(匹配任意长度字符)和_(匹配单个字符)通配符。
示例:from pyspark.sql.functions import col # 匹配col_name中包含"abc"的行 filtered_df = df.filter(col("col_name").like("%abc%")) # 匹配col_name以"abc"开头的行 filtered_df = df.filter(col("col_name").like("abc%"))rlike()方法:基于正则表达式实现匹配,功能比like()更灵活,适合复杂规则的匹配场景。
示例:# 匹配col_name中包含任意数字的行 filtered_df = df.filter(col("col_name").rlike("\\d"))contains()、startswith()、endswith():语义更直观的方法,分别对应包含、开头、结尾的匹配需求。
示例:# 匹配col_name包含"abc"的行 filtered_df = df.filter(col("col_name").contains("abc")) # 匹配col_name以"abc"开头的行 filtered_df = df.filter(col("col_name").startswith("abc")) # 匹配col_name以"abc"结尾的行 filtered_df = df.filter(col("col_name").endswith("abc"))
二、DataFrame列名处理方案
针对你给出的列名列表,要删除__i:nil结尾的列,并将__VALUE结尾的列重命名为前缀,可通过以下代码实现:
from pyspark.sql.functions import col # 你的列名列表 cols = ['Timestamp', 'ScheduleCode__VALUE', 'ScheduleCode__i:nil', 'ProductionCode__VALUE', 'ProductionCode__i:nil', 'ProductCode__VALUE', 'ProductCode__i:nil', 'ProductCategory__VALUE', 'ProductCategory__i:nil'] # 构造处理后的列表达式 processed_columns = [] for col_name in cols: # 跳过__i:nil结尾的列 if col_name.endswith('__i:nil'): continue # 重命名__VALUE结尾的列 elif col_name.endswith('__VALUE'): new_col_name = col_name.split('__VALUE')[0] processed_columns.append(col(col_name).alias(new_col_name)) # 其他列保留原名 else: processed_columns.append(col(col_name)) # 将处理后的列应用到DataFrame df = df.select(processed_columns)
执行后,DataFrame会保留Timestamp、ScheduleCode、ProductionCode、ProductCode、ProductCategory这些列,完全符合需求。
内容的提问来源于stack exchange,提问作者Arnab Dasgupta
相关产品推荐
相关产品推荐

