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

如何在Spark SQL中使用正则表达式提取URL中的指定字段

Spark SQL 正则提取URL目标字段实现方案

你可以直接使用Spark SQL内置的regexp_extract函数完成提取,不需要自定义UDF,该函数的语法规则为:
regexp_extract(待匹配字符串列, 正则表达式, 捕获组序号)
其中第三个参数传1即可,你编写的正则中第一个捕获组对应的就是需要提取的目标名称。

注意事项

首先建议你修正正则的笔误:将捕获组内的[a-zA-z]改为[a-zA-Z],原写法会额外匹配[、\、]、^、_、这些非字母的ASCII字符,可能产生异常匹配结果。
另外在Spark SQL的字符串中写正则时,反斜杠\需要做转义,单个\要写成\\才能生效。

使用示例

纯Spark SQL语句写法

假设存储URL的表名为url_table,URL字段名为url_str:

SELECT
  url_str,
  regexp_extract(url_str, 'https:\\/\\/xxx\\.xxxxxx\\.com\\/xxxxx\\/(?:[^0-9\\/]+)\\/([a-zA-Z]*)', 1) AS target_name
FROM url_table
-- 如果需要过滤匹配失败的行可以加下面的条件
-- WHERE target_name <> ''

PySpark DataFrame API写法

from pyspark.sql.functions import regexp_extract

# df为已加载的包含URL字段的DataFrame
result_df = df.withColumn(
    "target_name",
    regexp_extract("url_str", r"https:\/\/xxx\.xxxxxx\.com\/xxxxx\/(?:[^0-9\/]+)\/([a-zA-Z]*)", 1)
)

Scala DataFrame API写法

import org.apache.spark.sql.functions.regexp_extract

val resultDf = df.withColumn(
  "target_name",
  regexp_extract(col("url_str"), "https:\\/\\/xxx\\.xxxxxx\\.com\\/xxxxx\\/(?:[^0-9\\/]+)\\/([a-zA-Z]*)", 1)
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:09:03