给定一个包含两列的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
非唯一的A/B配对包括:
1-2
2-2
因此,一个数据帧将包含具有唯一AB值的所有行,而另一个数据帧将包含非唯一AB值。ColC对过滤器无关紧要,但需要保留。如何运行此筛选器?
编辑:请注意,我不能使用dropDuplicates,因为它实际上是A和B的组合,需要是唯一的,而不仅仅是A或B。
发布于 2019-02-22 04:31:18
# 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|
+----+----+----+
https://stackoverflow.com/questions/54815613
复制相似问题