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

如何在PySpark中去除字符串的重音特殊字符?

去除Spark DataFrame中字符串列的重音字符

一、解决特殊字符显示为问号的问题

创建DataFrame时特殊字符变成问号,核心原因是编码不匹配,可通过以下方式解决:

  • 确保代码文件保存为UTF-8编码(多数编辑器默认支持,需确认编码设置)。
  • 终端运行时,设置编码为UTF-8:
    • Linux/macOS:执行 export LC_ALL=en_US.UTF-8
    • Windows:命令行执行 chcp 65001
  • 直接传入Python3默认的Unicode字符串创建DataFrame(无需额外转义):
from pyspark.sql import functions as F
from pyspark.sql.types import StructType, StructField, StringType

df = spark.createDataFrame(
    data=[("Vitória",), ("João",), ("Maurício",)],
    schema=StructType([StructField("name", StringType(), True)]))
df.show()

配置正确后,显示结果会正常展示特殊字符:

+---------+
|     name|
+---------+
| Vitória |
|    João |
|Maurício |
+---------+

二、有效去除重音字符的方法

方法1:使用Spark内置unaccent函数(推荐,Spark 3.0+)

Spark 3.0及以上版本提供了专门的unaccent函数,可直接去除字符重音标记,无需手动映射:

from pyspark.sql.functions import unaccent

df = df.withColumn("unaccent", unaccent(df.name))
df.show()

输出结果:

+---------+---------+
|     name|unaccent |
+---------+---------+
| Vitória |  Vitoria|
|    João |    Joao |
|Maurício | Mauricio|
+---------+---------+

方法2:自定义映射结合translate函数(兼容低版本Spark)

若Spark版本低于3.0,可继续使用translate函数,需确保映射字符的编码完全匹配:

from pyspark.sql.functions import translate

# 定义重音字符与无重音字符的一一映射
accent_chars = "áãâàéêèíîìóõôòúûùç"
no_accent_chars = "aaaaeeeiiioooouuuc"

df = df.withColumn("unaccent", translate(df.name, accent_chars, no_accent_chars))
df.show()

输出结果与上述一致,需注意映射字符串必须准确对应,否则会出现替换失效。

方法3:Python UDF结合unicodedata库(灵活扩展)

如需支持更多类型的重音字符,可自定义UDF利用Python的unicodedata模块处理:

import unicodedata
from pyspark.sql.functions import udf
from pyspark.sql.types import StringType

def remove_accent(s):
    if s is None:
        return None
    # 规范化字符串并过滤重音标记
    normalized = unicodedata.normalize('NFKD', s)
    return ''.join([c for c in normalized if not unicodedata.combining(c)])

remove_accent_udf = udf(remove_accent, StringType())

df = df.withColumn("unaccent", remove_accent_udf(df.name))
df.show()

该方法兼容性更强,但性能略低于Spark内置函数,适合小批量数据处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:45:34