我有一个带有
值的rdda,b
a,c
a,d
b,a
c,d
d,c
d,e
我需要的是一个包含倒数对的rdd,但只有一组。它必须是:
a,b or b,a
c,d or d,c
我当时认为可以将它们添加到列表中并循环查找相反的对,如果存在过滤第一个值,则删除互惠对。我在想必须有一种使用scala函数的方法,比如join或case,但我很难理解它们
答案 0 :(得分:3)
如果你不介意改变每一对的顺序(例如,(a,b)变为(b,a)),你可以给出一个简单易用的并行化解决方案。以下示例使用数字,但对可以是任何东西;只要价值具有可比性。
在香草斯卡拉:
List(
(2, 1),
(3, 2),
(1, 2),
(2, 4),
(4, 2)).map{ case(a,b) => if (a>b) (a,b) else (b,a) }.toSet
这将导致:
res1: Set[(Int, Int)] = Set((2, 1), (3, 2), (4, 2))
在Spark RDD中,上述内容可表示为:
sc.parallelize((2, 1)::(3, 2)::(2, 1)::(4, 2)::(4, 2)::Nil).map{ case(a,b) =>
if (a>b) (a,b) else (b,a) }.distinct()