Pyspark: удалить дубликаты, если между двумя столбцами есть обратный
У меня есть dataframe (около 20000000 строк), и я хотел бы удалить дубликаты из dataframe для двух столбцов, если эти столбцы имеют одинаковые значения, или даже если эти значения находятся в обратном порядке. Например, оригинальный фрейм данных:
+----+----+----+
|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: удалите обратные дубликаты из фрейма данных, но это заняло больше времени.
1 ответ
Решение
Вы можете использовать это: надеюсь, это поможет.
Примечание: в '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()