我有对的RDD如下:拆分RDD成RDD的没有重复的值
(105,918)
(105,757)
(502,516)
(105,137)
(516,816)
(350,502)
我想将其分成两个RDD的,使得第一仅具有非重复值对(对于键和值),第二个将具有其余的省略对。
所以从上面我们可以得到两个RDD的
1) (105,918)
(502,516)
2) (105,757) - Omitted as 105 is already included in 1st RDD
(105,137) - Omitted as 105 is already included in 1st RDD
(516,816) - Omitted as 516 is already included in 1st RDD
(350,502) - Omitted as 502 is already included in 1st RDD
目前我使用的是可变的变量设置跟踪合并原RDD到单个分区后,已经选择的元素:
val evalCombinations = collection.mutable.Set.empty[String]
val currentValidCombinations = allCombinations
.filter(p => {
if(!evalCombinations.contains(p._1) && !evalCombinations.contains(p._2)) {
evalCombinations += p._1;evalCombinations += p._2; true
} else
false
})
此方法受操作运行所在的执行程序的内存限制。是否有更好的可扩展解决方案?
我对问题描述和例子感到困惑:描述说'将它分成两个RDD,使得第一个只有非重复值的对(对于键和值)“。然而,这个例子表明,由此产生的RDD包含105个,在样本中重复3次,502-2次,516-2次。事实上,在描述之后,你的例子中产生的RDD应该是空的。谨慎澄清? – maasg
@maasg在我的阅读中,这意味着RDD需要分成两部分。第一个RDD应该包含唯一的键和值。任何重复的键/值将进入第二个RDD。所以在这个例子中,第一个RDD有((105,918),(502,516))。在这组关键值中,没有重复。 –