检查Pyspark Dataframe 中的重复项

34gzjxbg  于 2022-11-01  发布在  Spark
关注(0)|答案(5)|浏览(201)

是否有一种简单有效的方法可以基于列检查python Dataframe 中的重复项(而不是删除它们)?
我想检查 Dataframe 是否有基于列组合的重复,如果有,则使该过程失败。
短暂性脑缺血发作

628mspwn

628mspwn1#

如果您还想实际检查重复项,可以执行以下操作

df \
    .groupby(['column1', 'column2']) \
    .count() \
    .where('count > 1') \
    .sort('count', ascending=False) \
    .show()
zy1mlcev

zy1mlcev2#

最简单的方法是检查 Dataframe 中的行数是否等于删除重复项后的行数。

if df.count() > df.dropDuplicates([listOfColumns]).count():
    raise ValueError('Data has duplicates')
oyjwcjzk

oyjwcjzk3#

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

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

jv4diomz4#

您可以计算一组数据行上的非重复数据列数目,并将其与总数据列数目比较。如果它们相同,则没有重复数据列。如果非重复数据列数目小于总数据列数目,则有重复数据列存在。
df.select(list_of_columns).distinct()df.select(list_of_columns).count()

yv5phkfx

yv5phkfx5#

不需要调用count()两次,只需一次操作即可获得两个计数。

from pyspark.sql import functions as F

cols = ['col1', 'col2', 'col3']

counts_df = df.select([
    F.countDistinct(*cols).alias('n_unique'),
    F.count('*').alias('n_rows')
])
n_unique, n_rows = counts_df.collect()[0]

现在,使用n_uniquen_rows,可以记录重复/唯一百分比,可以使流程失败等。

相关问题