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

如何在PySpark中筛选DataFrame单列的去重非空值

PySpark 从指定列筛选非空去重值的实现方案

假设你当前处理的 DataFrame 名为 df,需要处理的目标列名为 target_col,可按以下方式操作:

基础实现(仅过滤null值)

先做非空过滤、再选中目标列、最后执行去重,效率更高:

# 得到仅包含目标列非空唯一值的DataFrame
result_df = df.filter(df.target_col.isNotNull()) \
              .select("target_col") \
              .distinct()

如果你需要把结果转为Python列表用于后续逻辑,可追加转换操作:

unique_value_list = df.filter(df.target_col.isNotNull()) \
                      .select("target_col") \
                      .distinct() \
                      .rdd.flatMap(lambda x: x) \
                      .collect()

扩展场景(同时过滤null和空字符串)

如果业务逻辑中空字符串也属于需要排除的无效值,可调整过滤条件:

result_df = df.filter( (df.target_col.isNotNull()) & (df.target_col != "") ) \
              .select("target_col") \
              .distinct()

替代写法

你也可以用dropDuplicates()方法替代distinct(),二者在单字段去重场景下效果一致:

result_df = df.filter(df.target_col.isNotNull()).select("target_col").dropDuplicates()

注意事项

  • 优先执行过滤再执行去重,可以减少去重阶段需要处理的数据量,提升运行效率
  • 如果列名包含空格、特殊字符,可使用df["目标列名"]的格式替代df.目标列名写法,避免语法报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 03:00:05