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

如何在PySpark DataFrame中从含斜杠字符串提取目标值?

PySpark 处理斜杠分隔字符串列的解决方案

直接上代码和逻辑,按你的需求实现:

步骤1:准备测试数据

先创建和你示例匹配的DataFrame:

from pyspark.sql import SparkSession
from pyspark.sql.functions import split, array_filter, array_min, when, col, cast, size

spark = SparkSession.builder.appName("StringSplitProcess").getOrCreate()

data = [
    ("111/112",),
    ("113/PAG",),
    ("801/802/803/804",),
    ("801/62S",)
]

df = spark.createDataFrame(data, ["input_col"])
df.show()

步骤2:实现处理逻辑

核心思路是先拆分字符串为数组,再按规则分支处理:

  • 先过滤出数组里非纯数字的元素(匹配包含非数字字符的项)
  • 如果存在非纯数字项,直接取该项(假设每组最多一个,若有多个可根据需求调整取第一个或全部)
  • 如果全是数字,转成整数数组后取最小值

代码实现:

processed_df = df.withColumn("split_col", split(col("input_col"), "/")) \
    .withColumn("alphanumeric_items", array_filter(col("split_col"), lambda x: x.rlike("[^0-9]"))) \
    .withColumn("result", 
                when(col("alphanumeric_items").isNotNull() & (size(col("alphanumeric_items")) > 0), 
                     col("alphanumeric_items")[0]) \
                .otherwise(array_min(col("split_col").cast("array<int>")))) \
    .select("input_col", "result")

processed_df.show(truncate=False)

结果说明

运行后输出和你的期望完全一致:

+----------------+------+
|input_col       |result|
+----------------+------+
|111/112         |111   |
|113/PAG         |PAG   |
|801/802/803/804 |801   |
|801/62S         |62S   |
+----------------+------+

关键函数解释

  • split(col("input_col"), "/"):把斜杠分隔的字符串拆成数组
  • array_filter(..., lambda x: x.rlike("[^0-9]")):过滤出包含非数字字符的项(即字母数字混合项)
  • when(..., ...).otherwise(...):分支判断,优先取字母数字项,否则取数字最小值
  • array_min(col("split_col").cast("array<int>")):把字符串数组转成整数数组后取最小值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 16:16:06