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

如何用PySpark高效提取DataFrame中Letters列的唯一字符?

解决方案

用PySpark内置函数就能高效完成,全程分布式处理,适配大数据集,无需手动遍历:

核心步骤

  1. 将Letters列的逗号分隔字符串拆分为字符数组;
  2. 把数组扁平化,每个字符单独成一行;
  3. 对字符去重;
  4. 收集为有序列表(可选排序逻辑匹配预期结果)。

基础实现(按字符自然排序)

from pyspark.sql import SparkSession
from pyspark.sql.functions import split, explode, collect_list, col

# 初始化SparkSession
spark = SparkSession.builder.appName("ExtractUniqueChars").getOrCreate()

# 创建示例DataFrame
data = [(1, "a,b,c,d"), (2, "b,d,b"), (3, "c,y,u")]
df = spark.createDataFrame(data, ["ID", "Letters"])

# 提取唯一字符列表
unique_chars = (
    df
    .select(explode(split(col("Letters"), ",")))  # 分割字符串并展开为单行字符
    .distinct()  # 去重
    .orderBy(col("col"))  # 按字符自然排序
    .agg(collect_list(col("col")))  # 收集为列表
    .first()[0]  # 取出结果列表
)

print(unique_chars)  # 输出: ['a', 'b', 'c', 'd', 'u', 'y']

按首次出现顺序实现(匹配预期结果)

如果需要严格按照字符首次出现的顺序输出['a','b','c','d','y','u'],可以先记录每个字符首次出现的最小ID,再按该ID排序:

from pyspark.sql.functions import min

unique_chars_ordered = (
    df
    .select(explode(split(col("Letters"), ",")).alias("char"), col("ID"))
    .groupBy("char")
    .agg(min("ID").alias("first_appear_id"))  # 获取字符首次出现的ID
    .orderBy("first_appear_id", "char")  # 按首次出现顺序排序
    .agg(collect_list("char"))
    .first()[0]
)

print(unique_chars_ordered)  # 输出: ['a', 'b', 'c', 'd', 'y', 'u']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:15:51