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

如何在PySpark中删除姓氏与性别重复的数据行?

用PySpark删除姓氏与性别均重复的所有行

直接上实操步骤,针对你给出的数据集,要删掉所有姓氏(last_name)和性别(gender)组合重复的行(也就是Smith+M的那两行),具体做法如下:

1. 初始化Spark环境并加载数据

先创建SparkSession,把你的数据转换成带列名的DataFrame:

from pyspark.sql import SparkSession
from pyspark.sql.functions import count, col

# 启动SparkSession
spark = SparkSession.builder.appName("RemoveDupGroups").getOrCreate()

# 你的原始数据
data = [('James','Smith','M',30),('Anna','Rose','F',41),
('Robert','Smith','M',62),('Jake','Rose','M',21) ]

# 创建DataFrame,指定列名
df = spark.createDataFrame(data, schema=["first_name", "last_name", "gender", "age"])
df.show()

运行后能看到原始数据:

+----------+---------+------+---+
|first_name|last_name|gender|age|
+----------+---------+------+---+
|     James|    Smith|     M| 30|
|      Anna|     Rose|     F| 41|
|    Robert|    Smith|     M| 62|
|      Jake|     Rose|     M| 21|
+----------+---------+------+---+

2. 用窗口函数高效过滤重复分组

最推荐的高效方式是用窗口函数,直接给每行标记它所在的(last_name, gender)组合的出现次数,再过滤掉次数大于1的行:

from pyspark.sql.window import Window

# 定义窗口:按姓氏和性别分组
window_spec = Window.partitionBy("last_name", "gender")

# 给每行添加分组内的计数列,过滤后移除计数列
result_df = df.withColumn("group_count", count("*").over(window_spec)) \
              .filter(col("group_count") == 1) \
              .drop("group_count")

# 查看最终结果
result_df.show()

最终输出结果

运行后就能得到过滤后的DataFrame,Smith+M的重复组合行已经被全部删除:

+----------+---------+------+---+
|first_name|last_name|gender|age|
+----------+---------+------+---+
|      Anna|     Rose|     F| 41|
|      Jake|     Rose|     M| 21|
+----------+---------+------+---+

替代写法(分组关联过滤)

如果不习惯窗口函数,也可以先分组统计每个组合的出现次数,再关联回原表过滤:

# 分组统计每个(姓氏+性别)组合的出现次数
group_counts = df.groupBy("last_name", "gender").agg(count("*").alias("count"))

# 关联回原表,过滤掉出现次数大于1的行
result_df = df.join(group_counts, on=["last_name", "gender"], how="left") \
              .filter(col("count") == 1) \
              .drop("count")

result_df.show()

这个写法和窗口函数的结果完全一致,只是多了一步关联操作,效率略低于窗口函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 13:36:28