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

PySpark中使用UDF拆分单元格返回首尾元素,处理Null值问题

PySpark处理含Null的姓名拆分问题

原代码问题

你的代码报错是因为当FullName为Null时,函数里直接执行for i in full_name——None是不可迭代对象,这会直接触发NoneType相关错误。而且你没必要遍历输入值,直接判断是否为Null即可。

修正后的自定义UDF

先判断输入是否为Null,同时处理拆分后只有单个名字的场景(避免索引越界):

from pyspark.sql.functions import udf, col
from pyspark.sql.types import StringType

def get_name(full_name):
    if full_name is None:
        return None
    name_list = full_name.split(' ')
    # 只有单个名字时直接返回该名字
    if len(name_list) == 1:
        return name_list[0]
    return f"{name_list[0]} {name_list[-1]}"

udf_get_name = udf(get_name, StringType())
df_parquet = df_parquet.withColumn("NameReduz", udf_get_name(col("FullName")))

更高效的内置函数方案(推荐)

Spark内置函数无需自定义UDF,性能更优(避免Python与JVM之间的序列化开销),且自动处理Null值:

from pyspark.sql.functions import col, split, element_at, concat_ws

df_parquet = df_parquet.withColumn(
    "NameReduz",
    concat_ws(
        " ",
        element_at(split(col("FullName"), " "), 1),
        element_at(split(col("FullName"), " "), -1)
    )
)
  • split:把姓名按空格拆分成数组
  • element_at:取数组的第一个(索引1)和最后一个(索引-1)元素
  • concat_ws:用空格拼接两个元素,当原字段为Null时,结果自动为Null,完全符合你的预期输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:56:03