【问题标题】:Drop duplicates if reverse is present between two columns如果两列之间存在反向,则删除重复项
【发布时间】:2019-03-14 06:46:58
【问题描述】:

我有数据框包含(大约 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,但花了更多时间。

【问题讨论】:

    标签: pyspark


    【解决方案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()
    

    【讨论】:

    • 欢迎来到 SO,让我成为你的第一个支持者 :)
    • 非常感谢您的回答。要使 col3 包含“C”,您可以仅在选择 col1 和 col2 后进行删除复制,然后与原始数据框进行连接,然后再次对所有列进行 dropduplicates 以在连接后删除相同的值
    • 谢谢你,先生,我从来没有想过这个,它已经反复出现了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    相关资源
    最近更新 更多