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

如何用PySpark实现分组后仅保留单个指定Name的通用函数?

实现可复用的PySpark函数处理分组保留指定记录

核心思路

  • 先定位出分组内存在多个不同姓名的组
  • 将这些组与原表关联,筛选出这些组的所有记录
  • 最后仅保留这些组里指定姓名的所有记录

可复用函数代码

from pyspark.sql import functions as F
from pyspark.sql import DataFrame

def keep_specified_name_in_groups(df: DataFrame, group_cols: list, name_col: str, target_name: str) -> DataFrame:
    # 筛选出分组内不同姓名数量超过1的组
    problematic_groups = df.groupBy(group_cols)\
                           .agg(F.countDistinct(name_col).alias("distinct_name_count"))\
                           .filter(F.col("distinct_name_count") > 1)\
                           .select(group_cols)
    
    # 关联原表,只保留目标分组里指定姓名的记录
    result = df.join(problematic_groups, on=group_cols, how="inner")\
               .filter(F.col(name_col) == target_name)
    
    return result

使用示例

假设你的原始数据存在df里,分组列是job、age、gender,姓名列是name,要保留的是Mike的记录,直接调用函数即可:

filtered_df = keep_specified_name_in_groups(df, ['job','age','gender'], 'name', 'Mike')
filtered_df.show()

参数说明

  • df: 要处理的PySpark DataFrame
  • group_cols: 分组用的列名列表,比如['job','age','gender']
  • name_col: 存储姓名的列名,比如'name'
  • target_name: 需要保留的目标姓名,比如'Mike'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:50:29