Python PySpark:过滤掉列值在dataframe中多次出现的行

Python PySpark:过滤掉列值在dataframe中多次出现的行,python,pyspark,Python,Pyspark,给定一个包含两列的PySpark数据帧,我想将数据集拆分为两个数据帧:一个是ColA和ColB的组合唯一,另一个是非唯一 例如: ColA | ColB | ColCDoesntMatter 1 | 2 | 4 1 | 3 | 3 2 | 2 | 2 1 | 2 | 6 2 | 2 | 8 2 | 3 | 9 唯一的A/B对是: 1-3 2-3 1-2 2-2 非均匀A/B对为: 1-3 2-3 1-2 2-2 因

给定一个包含两列的PySpark数据帧,我想将数据集拆分为两个数据帧:一个是ColA和ColB的组合唯一,另一个是非唯一

例如:

ColA | ColB | ColCDoesntMatter
1    | 2    | 4
1    | 3    | 3
2    | 2    | 2
1    | 2    | 6
2    | 2    | 8
2    | 3    | 9
唯一的A/B对是:

1-3
2-3
1-2
2-2
非均匀A/B对为:

1-3
2-3
1-2
2-2
因此,一个数据帧将具有唯一AB值的所有行,而另一个数据帧将包含非唯一AB值。ColC对过滤器不重要,但需要保留。如何运行此筛选器

编辑:请注意,我不能使用dropDuplicates,因为A和B的组合确实需要唯一,而不仅仅是A或B。

使用
groupBy
(或
Window
)和
count
。看一看。可能是重复的
# count rows per A-B
dfWithRowCount = df.selectExpr("*", "count('*') over (partition by (ColA, ColB)) as nrows")

# filter
uniqueAB = dfWithRowCount.filter(dfWithRowCount.nrows == 1).drop('nrows')
nonUniqueAB = dfWithRowCount.filter(dfWithRowCount.nrows > 1).drop('nrows')

nonUniqueAB.show()
+----+----+----+
|ColA|ColB|ColC|
+----+----+----+
|   2|   2|   2|
|   2|   2|   8|
|   1|   2|   4|
|   1|   2|   6|
+----+----+----+

uniqueAB.show()
+----+----+----+
|ColA|ColB|ColC|
+----+----+----+
|   1|   3|   3|
|   2|   3|   9|
+----+----+----+