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

Spark SQL LIKE条件为何需使用双百分号%%?

Spark SQL中LIKE条件需用双百分号(%%)的原因分析

现象描述

在使用PySpark进行数据查询时,遇到了以下异常情况:

  • 使用DataFrame API的like方法时,单百分号%无法匹配目标数据,返回空DataFrame:
    df.filter(F.col("product_type").like("ORANGE%")).show()
    
  • 改用双百分号%%则能正常返回匹配结果:
    df.filter(F.col("product_type").like("ORANGE%%")).show()
    
  • 直接编写Spark SQL字符串查询时,同样存在这个问题:单%无结果,双%%才能匹配。

根本原因

这不是Spark SQL的配置问题,完全是Python字符串的语法特性导致的:

  • 在Python中,%是字符串格式化的占位符(例如"Hello %s" % "Spark"用于替换字符串内容)。
  • 当你在字符串中写入单个%时,Python会将其识别为待填充的格式化标记,而非普通字符。
  • 因此,当你把包含单%的字符串传递给Spark时,Python会提前对%进行解析处理,导致实际传递给Spark的内容并非你预期的通配符%,自然无法匹配数据。
  • 使用%%是Python中对%的转义写法,Python会将%%解析为单个%字符,再传递给Spark,此时Spark才能正确识别为LIKE条件的通配符。

替代解决方案

如果不想使用双百分号转义,可以用Python的原始字符串(在字符串前添加r前缀),原始字符串会忽略Python的转义和格式化规则,直接将内容原样传递给Spark:

DataFrame API示例

df.filter(F.col("product_type").like(r"ORANGE%")).show()

Spark SQL字符串示例

df_new = sql(r"""
SELECT *
FROM product_table
WHERE product_type like 'ORANGE%'
""")
df_new.show()

内容的提问来源于stack exchange,提问作者smurphy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:55:13