检查 Pyspark Dataframe 中的重复项
Posted
技术标签:
【中文标题】检查 Pyspark Dataframe 中的重复项【英文标题】:check for duplicates in Pyspark Dataframe 【发布时间】:2018-05-01 19:55:16 【问题描述】:有没有一种简单而有效的方法来检查 python 数据帧中的重复项(而不是删除它们)?
我想根据列的组合检查数据框是否有重复,如果有,则使该过程失败。
TIA。
【问题讨论】:
您还可以在this answer 中找到解决问题Count number of duplicate rows in SPARKSQL 的方法很有帮助。 【参考方案1】:如果您还想实际检查重复项,您可以这样做
df \
.groupby(['column1', 'column2']) \
.count() \
.where('count > 1') \
.sort('count', ascending=False) \
.show()
【讨论】:
不幸的是,这仅显示第一个之外的重复项。例如,如果我想在列(或列列表)上标记所有具有重复值的数据,那么这将错过第一个实例。 :(【参考方案2】:最简单的方法是检查数据框中的行数是否等于删除重复项后的行数。
if df.count() > df.dropDuplicates([listOfColumns]).count():
raise ValueError('Data has duplicates')
【讨论】:
谢谢 - 我想到了这一点,想知道这是最简单的方法还是我错过了一个很酷的技巧。 不,我无法想象会有某种hasDuplicates
功能。您可以创建一个临时表并执行类似spark.sql('select count(*) - count(distinct col) from temp_view')
的操作。这当然不是一种更简单的方法,但它可能(也可能不会)有更好的性能
这种方法只能查count,那data呢?让我详细说明一下:在 df1 列 c1[1,2,3,4,5] 中,另一个 df2 列 c2[1,1,2,3,4,5]。您将如何验证数据是否重复
不确定您到底想做什么,但听起来join
或subtract
方法可能会有所帮助。【参考方案3】:
检查重复项的另一种方法是:
df.exceptAll(df.dropDuplicates([listOfColumns]))
【讨论】:
以上是关于检查 Pyspark Dataframe 中的重复项的主要内容,如果未能解决你的问题,请参考以下文章
具有聚合唯一值的pyspark dataframe groupby [重复]
批量从Dataframe插入到DB,忽略Pyspark中的失败行
如何检查 Pyspark Dataframe 中是不是存在列表交集