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

PySpark中如何正确拆分全名为名、中间名及姓氏?代码修正

修正PySpark姓名拆分逻辑实现预期结果

你的问题出在原代码用固定索引提取姓名各部分,没法适配两词、多词的全名格式。按照「首词为first_name,末词为last_name,中间所有词合并为middle_name(两词时中间名为空)」的规则,可通过以下代码实现:

import pyspark.sql.functions as F

# 拆分全名为数组
df = df.withColumn("arr", F.split(F.col("Name"), " "))

# 提取各姓名部分
df = (df
      .withColumn("first_name", F.element_at(F.col("arr"), 1))
      .withColumn("last_name", F.element_at(F.col("arr"), -1))
      .withColumn("middle_name", 
                  F.when(F.size(F.col("arr")) <= 2, "")
                    .otherwise(F.concat_ws(" ", F.slice(F.col("arr"), 2, F.size(F.col("arr")) - 2))))
      .drop("arr"))  # 可选:删除中间数组列

关键函数说明

  • F.element_at(arr, index): 支持正数/负数索引,负数索引直接取数组末尾元素,完美适配任意长度的全名。
  • F.size(arr): 获取数组长度,用来判断是否需要提取中间名。
  • F.slice(arr, start, length): 截取数组中从start索引开始、长度为length的子数组,这里从第2个元素开始,截取长度为「总长度-2」的部分(即去掉首尾元素后的所有内容)。
  • F.concat_ws(" ", ...): 将截取到的中间名数组用空格拼接成字符串。

测试验证

用你提供的输入数据集运行上述代码后,输出将与预期一致:

first_namemiddle_namelast_name
AnubhavSharma
RakeshKumarSharma
MuthiahSrinivas attapatuMurlidharan

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 06:46:15