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

Scala+Spark环境下DataFrame如何实现多字符串like模糊匹配

实现方案

方案1:使用reduce拼接OR条件(推荐)

这种方法完全兼容Spark原生的like语法,无需额外转义通配符,规则写法和SQL的like完全一致,适配所有场景:

import org.apache.spark.sql.functions._

val df = sc.parallelize(Seq(("Apple"),("Banana"),("Graphes"),("Pineapple"))).toDF("col1")
val s = Seq("Ban%","Grap%")

// 把所有模糊规则拼接为OR条件
val filterCondition = s.map(pattern => col("col1").like(pattern)).reduce(_ || _)
val resultDf = df.filter(filterCondition)

resultDf.show()

执行输出结果:

+-------+
|   col1|
+-------+
| Banana|
|Graphes|
+-------+

方案2:转换为正则使用rlike算子

如果你的模糊规则只有%作为通配符,可以把规则转换为正则表达式,用rlike实现匹配:

import org.apache.spark.sql.functions._

val df = sc.parallelize(Seq(("Apple"),("Banana"),("Graphes"),("Pineapple"))).toDF("col1")
val s = Seq("Ban%","Grap%")

// 将like的%通配符替换为正则的.*,用|拼接多个规则
val regex = s.map(_.replace("%", ".*")).mkString("|")
val resultDf = df.filter(col("col1").rlike(regex))

resultDf.show()

注意:如果匹配规则中包含SQL like的单字符通配符_,需要额外替换为正则的.;如果规则中包含正则特殊字符(如.、+、*、?等),需要先做转义处理,避免匹配结果不符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:24:01