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

PySpark字符串列去重:保留唯一字母(不使用UDF)

在PySpark中保留字符串列的唯一字母字符(原生无UDF方案)

要实现仅保留字符串列中的唯一字母字符,且不使用UDF,可以通过PySpark内置函数的组合来完成,核心思路是先过滤非字母字符,再拆分去重后拼接。

具体实现代码

from pyspark.sql import SparkSession
from pyspark.sql.functions import regexp_replace, split, array_distinct, concat_ws

# 初始化Spark会话
spark = SparkSession.builder.appName("UniqueLettersExtraction").getOrCreate()

# 创建测试数据
df = spark.createDataFrame([("abcbb12b",)], ["input_str"])
df.show()

# 执行处理逻辑
result_df = df.withColumn(
    "cleaned_letters",
    regexp_replace("input_str", "[^a-zA-Z]", "")  # 移除所有非字母字符
).withColumn(
    "char_array",
    split("cleaned_letters", "")  # 将字符串拆分为单个字符的数组
).withColumn(
    "unique_char_array",
    array_distinct("char_array")  # 对字符数组去重
).withColumn(
    "output_str",
    concat_ws("", "unique_char_array")  # 将去重后的数组拼接为字符串
).select("input_str", "output_str")

result_df.show()

步骤解释

  1. 过滤非字母字符:使用regexp_replace配合正则[^a-zA-Z],把输入字符串里的数字、符号等非字母内容全部替换为空,得到纯字母字符串(示例中得到abcbbb)。
  2. 拆分字符为数组:用split将纯字母字符串按空字符串拆分,生成单个字符组成的数组(示例中得到["a","b","c","b","b","b"])。
  3. 数组去重:通过array_distinct对字符数组去重,保留每个字母的首次出现(示例中得到["a","b","c"])。
  4. 拼接回字符串:用concat_ws以空字符串为分隔符,把去重后的数组重新拼接成最终结果字符串(示例中得到abc)。

关于你之前的问题

你提到尝试re.sub未成功,原因是在PySpark原生API中不能直接调用Python的re模块(除非用UDF,但你要求排除这种方式),必须使用PySpark内置的regexp_replace函数来做正则替换操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 06:52:05