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

PySpark教程:如何在DataFrame的Ident列中应用正则表达式?

PySpark DataFrame Ident列正则转换实现方案

需求说明

需要对PySpark DataFrame的Ident列应用正则表达式完成转换,规则如下:

  • 匹配到15/19时,转换为'S15/19'
  • 匹配到14/11时,转换为'S11/14'(数字部分反转)
  • 匹配到HPD时,转换为'HPD'
  • 匹配到PTG时,转换为'PTG'

示例数据

原DataFrame:

+-------------+                                                             
|  Ident      |
+-------------+
|SAS 15/19 USA|
+-------------+
|SHS 14/11 ENG|
+-------------+
|SGS  HPD  FRA|
+-------------+
|SSS  PTG  ALL|
+-------------+

期望生成的new_col列:

+-------------+                                                             
|  new_col    |
+-------------+
|    S15/19   |
+-------------+
|    S11/14   |
+-------------+
|    HPD     |
+-------------+
|    PTG     |
+-------------+

实现代码

通过when条件分支结合regexp_extract、regexp_replace实现精准匹配与转换:

from pyspark.sql import SparkSession
from pyspark.sql.functions import when, regexp_extract, regexp_replace

# 初始化SparkSession
spark = SparkSession.builder.appName("IdentTransform").getOrCreate()

# 创建示例DataFrame
data = [
    ("SAS 15/19 USA",),
    ("SHS 14/11 ENG",),
    ("SGS  HPD  FRA",),
    ("SSS  PTG  ALL",)
]
df = spark.createDataFrame(data, ["Ident"])

# 生成new_col列
df_transformed = df.withColumn(
    "new_col",
    when(regexp_extract("Ident", r"15/19", 0) == "15/19", "S15/19")
    .when(regexp_extract("Ident", r"14/11", 0) == "14/11", regexp_replace("Ident", r".*(\d+)/(\d+).*", "S$2/$1"))
    .when(regexp_extract("Ident", r"HPD", 0) == "HPD", "HPD")
    .when(regexp_extract("Ident", r"PTG", 0) == "PTG", "PTG")
)

# 查看转换结果
df_transformed.select("new_col").show()

代码说明

  1. 处理15/19模式:用regexp_extract精准匹配目标字符串,匹配成功直接返回S15/19
  2. 处理14/11模式:通过正则捕获组(\d+)/(\d+)提取数字段,再用regexp_replace交换两个分组的位置,拼接成S11/14
  3. 处理HPD/PTG模式:直接提取目标字符串并返回原值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:15:48