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

Spark中使用正则表达式查询多维数组数据

解决嵌套数组的过滤需求

要筛选出data数组中至少有一个元素的id以test_加数字开头的记录,你可以利用Spark的数组遍历函数结合正则匹配来实现,具体方案如下:

Spark SQL 实现

直接通过SQL语句过滤,两种写法可选:

方式1:使用UNNEST + EXISTS

SELECT *
FROM your_table
WHERE EXISTS(
    SELECT 1
    FROM UNNEST(data) AS element
    WHERE element.id RLIKE '^test_\\d+'
)

方式2:使用array_exists(Spark 3.0+支持)

SELECT *
FROM your_table
WHERE array_exists(data, elem => elem.id RLIKE '^test_\\d+')

Scala DataFrame API 实现

如果用Scala代码操作DataFrame:

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

// 假设originalDF是你的源DataFrame
val filteredDF = originalDF.filter(
  array_exists(col("data"), elem => elem.getField("id").rlike("^test_\\d+"))
)

关键细节说明

  • exists/array_exists:这两个函数会遍历数组的所有元素,只要有一个元素满足条件就返回true,完美匹配你"至少一个元素符合要求"的过滤逻辑。
  • 正则表达式^test_\\d+:
    • ^ 限定匹配字符串的开头
    • test_ 匹配固定前缀
    • \\d+ 匹配一个或多个数字(Scala中反斜杠需要转义,因此写两个)
  • 为什么你的之前尝试不适用:
    • array_contains仅支持精确值匹配,无法处理模式匹配场景;
    • data[0].id只能检查数组的第一个元素,无法覆盖所有元素的校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:35:26