我有一个数据框包含(大约20000000行),并且我想从数据框中删除两列的重复项(如果这些列具有相同的值,或者即使这些值的顺序相反)。 例如原始数据框:
+----+----+----+
|col1|col2|col3|
+----+----+----+
| 1| 1| A|
| 1| 1| B|
| 2| 1| C|
| 1| 2| D|
| 3| 5| E|
| 3| 4| F|
| 4| 3| G|
+----+----+----+
其中列的架构如下:
root
|-- col1: string (nullable = true)
|-- col2: string (nullable = true)
|-- col3: string (nullable = true)
所需的数据框应如下所示:
+----+----+----+
|col1|col2|col3|
+----+----+----+
| 1| 1| A|
| 1| 2| D|
| 3| 5| E|
| 3| 4| F|
+----+----+----+
如果值的顺序相同,则dropDuplicates()
方法将删除重复项
我遵循了对这个问题Pandas: remove reverse duplicates from dataframe的接受的答案,但是花了更多时间。
答案 0 :(得分:2)
您可以使用此: 希望这会有所帮助。
注意:在“ col3”中,将删除“ D”而不是“ C”,因为“ C”位于“ D”之前。
from pyspark.sql import functions as F
df = spark.read.csv('/FileStore/tables/stack2.csv', header = 'True')
df2 = df.select(F.least(df.col1,df.col2).alias('col1'),F.greatest(df.col1,df.col2).alias('col2'),df.col3)
df2.dropDuplicates(['col1','col2']).show()