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

如何在PySpark中提取DataFrame列中最后一个/分隔的字符串值

错误原因

PySpark的Column类未提供原生rsplit方法,你直接调用Python字符串方法作用于Spark列对象,不符合Spark的API规范,因此触发TypeError。

实现方案

方案1:split + element_at(Spark 2.4及以上版本推荐)

这是最简单的实现方式,利用数组负数索引直接取最后一个元素:
首先导入依赖函数:
from pyspark.sql.functions import split, element_at, col

执行查询代码:
df = df.select(element_at(split(col("MyColumn"), "/"), -1).alias("extracted_content"))

说明:

  • split函数会将列值按/拆分为字符串数组
  • element_at的索引从1开始,传入-1直接返回数组最后一个元素
  • 自动兼容无分隔符、分隔符数量不固定的场景

方案2:反转截取(兼容低版本Spark)

如果使用的Spark版本低于2.4,没有element_at函数,可以用类似SQL的反转查找逻辑实现:
导入依赖函数:
from pyspark.sql.functions import col, reverse, instr, substr, length

执行查询代码:

df = df.select(
    substr(
        col("MyColumn"),
        # 计算最后一个/之后第一个字符的位置
        length(col("MyColumn")) - instr(reverse(col("MyColumn")), "/") + 2
    ).alias("extracted_content")
)
测试验证

构造测试数据验证效果:

test_data = [
    ("lala/mae.da/rg1/zzzzz",),
    ("a/b/c/d",),
    ("no_separator",),
    ("end_with_slash/",),
    ("",)
]
df = spark.createDataFrame(test_data, ["MyColumn"])
# 执行提取逻辑
df.select(element_at(split(col("MyColumn"), "/"), -1).alias("result")).show()

输出结果:

+-------------+
|       result|
+-------------+
|        zzzzz|
|            d|
|no_separator|
|             |
|             |
+-------------+

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:39:04