Pyspark: удалить дубликаты, если между двумя столбцами есть обратный - PullRequest
1 голос
/ 14 марта 2019

У меня есть фрейм данных (около 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() удаляет дубликаты, если значения в том же порядке

Я последовал принятому ответу на этот вопрос Панды: удалите обратные дубликаты из кадра данных , но это заняло больше времени.

1 Ответ

2 голосов
/ 14 марта 2019

Вы можете использовать это: Надеюсь, это поможет.

Примечание : в «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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...