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

如何在PySpark中通过模式匹配基于现有列生成新派生列

PySpark 派生列实现方案

核心逻辑按优先级匹配规则,全程使用PySpark内置函数实现,不需要自定义UDF,性能适配大规模数据场景。

实现步骤

  • 第一步:定义匹配优先级规则
    1. 优先匹配完整的Web Audio/Mobile Audio字符串,匹配成功直接返回对应值
    2. 未匹配到全称时,匹配独立出现的缩写WA/MA,映射为对应全称
    3. 未匹配到以上两类内容时,提取字符串首个分隔符(横杠、下划线、空格)前的有效内容
  • 第二步:代码实现
from pyspark.sql import functions as F

# 定义匹配规则
# 匹配独立出现的全名字符串,避免误匹配到其他单词内部的对应字符
has_web_audio = F.col("col1").rlike(r"(?:^|[_ \-])Web Audio(?:$|[_ \-])")
has_mobile_audio = F.col("col1").rlike(r"(?:^|[_ \-])Mobile Audio(?:$|[_ \-])")
# 匹配独立出现的缩写,避免误匹配(如WAVE不会被识别为WA)
has_wa = F.col("col1").rlike(r"(?:^|[_ \-])WA(?:$|[_ \-])")
has_ma = F.col("col1").rlike(r"(?:^|[_ \-])MA(?:$|[_ \-])")
# 非音频类场景处理:按横杠/下划线切分取第一部分,去除首尾空格
other_case = F.trim(F.split(F.col("col1"), r"[-_]")[0])

# 生成派生列
df = df.withColumn(
    "derived_col1",
    F.when(has_web_audio, "Web Audio")
    .when(has_mobile_audio, "Mobile Audio")
    .when(has_wa, "Web Audio")
    .when(has_ma, "Mobile Audio")
    .otherwise(other_case)
)
  • 第三步:规则扩展
    如果后续新增其他匹配规则,直接在when调用链的对应优先级位置新增条件即可,无需改动原有逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:57:05