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

PySpark清洗名称字段:去除点号多余空格、转小写并提取去重值

PySpark 名称字段清洗+去重实现方案

问题说明

待处理的名称类DataFrame字段存在三类格式异常:

  • 缩写后缀带多余点号
  • 字符间存在连续多个空格
  • 大小写不统一
    你当前写的代码仅实现了点号移除,没有覆盖多余空格处理、大小写统一的逻辑。
    原始数据样例:
N. Plainfield  
North Plainfield
West Home  Land 
NEWYORK
newyork
So. Plainfield
S.  Plaindield

清洗规则要求:

  • 移除所有点号
  • 连续空格合并为单个空格,保证缩写和后续名称、单词和单词之间仅留1个空格
  • 所有字符统一转为小写
  • 清洗完成后对字段值去重

实现代码

直接用PySpark内置函数按顺序做正则替换、大小写转换、去重即可,不需要自定义UDF,执行性能更好:

from pyspark.sql.functions import regexp_replace, lower, trim, col

# 第一步:移除所有点号
names_clean = names.withColumn(
    "name_clean",
    regexp_replace(col("name"), r"\.", "")
)
# 第二步:把连续1个以上的空白字符替换为单个空格,解决多空格问题
names_clean = names_clean.withColumn(
    "name_clean",
    regexp_replace(col("name_clean"), r"\s+", " ")
)
# 第三步:统一转小写
names_clean = names_clean.withColumn(
    "name_clean",
    lower(col("name_clean"))
)
# 可选:如果需要去掉字段首尾的多余空格,加这一步,不需要可以注释
# names_clean = names_clean.withColumn("name_clean", trim(col("name_clean")))

# 清洗完成后去重,仅保留清洗后字段的唯一值
names_dedup = names_clean.select("name_clean").distinct()

# 如果需要保留原表其他字段,用下面这行代替上面的去重代码,按清洗后的字段去重保留首条记录
# names_dedup = names_clean.dropDuplicates(["name_clean"])

效果说明

执行完清洗步骤后,字段值会统一为:

n plainfield
north plainfield
west home land
newyork
newyork
so plainfield
s plainfield

去重后输出结果为:

n plainfield
north plainfield
west home land
newyork
so plainfield
s plainfield

你给出的预期去重样例中存在空行、尾部多余空格,属于原始样例的格式误差,开启trim步骤即可消除首尾空格,根据实际业务需求选择是否开启即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:24:23