如何获取PySpark DataFrame中基于指定列的全部重复记录实例?
获取PySpark DataFrame中所有重复记录
要获取基于主键的所有重复记录实例,可以通过窗口函数统计每组主键的记录数,再筛选出计数大于1的行,这样就能包含每组的全部重复项,而非仅返回部分。
解决代码示例
from pyspark.sql.window import Window from pyspark.sql.functions import count primary_key = ['col_1', 'col_2'] # 定义窗口:按指定主键分组 window_spec = Window.partitionBy(*primary_key) # 添加计数列,统计每组内的记录总数 df_with_count = df.withColumn("record_count", count("*").over(window_spec)) # 筛选出记录数大于1的行,即所有属于重复组的记录 duplicate_records = df_with_count.filter(df_with_count.record_count > 1) duplicate_records.show(truncate=False)
输出结果
+-----+-----+-----+------------+ |col_1|col_2|col_3|record_count| +-----+-----+-----+------------+ |A |A |1 |3 | |A |A |2 |3 | |A |A |3 |3 | |A |B |4 |2 | |A |B |5 |2 | +-----+-----+-----+------------+
原方法问题说明
你之前使用df.exceptAll(df.dropDuplicates(primary_key))的方式,本质是从原数据中减去“每组保留一条”的去重数据集,因此只会返回每组中除保留项之外的重复记录,丢失了每组的第一条重复项。而窗口函数的方式能完整保留所有属于重复组的记录。
内容的提问来源于stack exchange,提问作者Mohammad
相关产品推荐
相关产品推荐

