如何在PySpark中提取字符串列的最后一个单词
解决PySpark提取字符串最后一个单词的问题
问题原因
你用F.split(...)[-1]的写法是Python列表的索引逻辑,但PySpark的split返回的是Spark数组类型,不支持负索引直接取值,所以才会全返回null。
正确实现方法
这里给你两种可行的写法:
方法1:使用element_at函数(推荐)
element_at是Spark专门用来取数组元素的函数,支持传入负索引表示从末尾取:
import pyspark.sql.functions as F # 提取最后一个单词并去除首尾空格 Mydata = Mydata.withColumn('KeepLast', F.trim(F.element_at(F.split(F.col('MyColumn'), " "), -1)))
方法2:反转数组后取第一个元素
先反转split得到的数组,再取第一个元素,也能拿到最后一个单词:
import pyspark.sql.functions as F Mydata = Mydata.withColumn('KeepLast', F.trim(F.first(F.reverse(F.split(F.col('MyColumn'), " ")), True)))
额外优化:处理连续空格
如果你的字符串里存在多个连续空格,用" "分割会生成空字符串元素,建议改用\\s+匹配任意数量的空白字符:
# 替换分割规则为匹配任意空白 F.split(F.col('MyColumn'), "\\s+")
内容的提问来源于stack exchange,提问作者Nabs335
相关产品推荐
相关产品推荐

