Pyspark:如果两列之间存在反向,则删除重复项

时间:2019-03-14 06:46:58

标签: pyspark drop-duplicates

我有一个数据框包含(大约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的接受的答案,但是花了更多时间。

1 个答案:

答案 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()