【问题标题】:check for duplicates in Pyspark Dataframe检查 Pyspark Dataframe 中的重复项
【发布时间】:2018-05-01 19:55:16
【问题描述】:

有没有一种简单而有效的方法来检查 python 数据帧中的重复项(而不是删除它们)?

我想根据列的组合检查数据框是否有重复,如果有,则使该过程失败。

TIA。

【问题讨论】:

标签: python-2.7 dataframe pyspark spark-dataframe


【解决方案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]。您将如何验证数据是否重复
  • 不确定您到底想做什么,但听起来joinsubtract 方法可能会有所帮助。
【解决方案3】:

检查重复项的另一种方法是:

df.exceptAll(df.dropDuplicates([listOfColumns]))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 2020-08-25
    相关资源
    最近更新 更多