在python中删除RDD中的重复元组?

时间:2018-02-26 18:28:20

标签: python apache-spark pyspark

我有一个RDD作为元组对的列表: -

[((1.1, 1.2), (0.1, 0.1)),
 ((1.1, 1.2), (0.4, 2.1)),
 ((0.1, 0.1), (1.1, 1.2)),
 ((9.0, 9.0), (9.1, 9.1)),
 ((0.4, 2.1), (1.1, 1.2)),
 ((9.1, 9.1), (9.0, 9.0))]

如何从此RDD中删除重复的元组并获取所需的输出:

[((1.1, 1.2), (0.1, 0.1)),
 ((1.1, 1.2), (0.4, 2.1)),
 ((9.1, 9.1), (9.0, 9.0))]

我已经尝试过distinct()但没有获得所需的输出。

1 个答案:

答案 0 :(得分:1)

您似乎想要获取不同的元组对,忽略它们出现的顺序。您的尝试rdd.distinct()在这种情况下不起作用,因为它只删除重复的行(顺序很重要)。

您可以做的一件事是对行进行排序,以便元素对始终以相同的顺序出现,然后调用distinct()

rdd.map(lambda x: tuple(sorted(x))).distinct().collect()

在您的数据上,这会产生:

[((9.0, 9.0), (9.1, 9.1)),
 ((0.1, 0.1), (1.1, 1.2)),
 ((0.4, 2.1), (1.1, 1.2))]