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()
Другие вопросы по тегам