根据spark中的值删除重复键

时间:2014-10-24 18:50:01

标签: apache-spark

假设我通过并行化键值对列表[(1,4),(2,3),(1,1),(1,0),(2,0)]给出了RDD并且我想根据它们的值删除具有相同键的元组(因此对于具有相同键的元组,仅保留具有最低值的元组)。所以我想应用一个转换,使RDD最后由[(1,0),(2,0)]表示(只要删除正确的副本,我不在乎这里的排序)。目前,我正在做的是打电话

RDD = RDD.map(lambda (x, y): (y, x)).sortByKey().map(lambda (x, y): (y, x)).reduceByKey(lambda x, y: x)

前三个转换让我按值排序,最后一个简单地删除重复键(因为我的元组按值排序,现在具有最小值的元组副本保持不变)。这样做很好,但我觉得这样做肯定是过于复杂的事情,导致性价比过高。有没有人知道如何简化这一点?非常感谢帮助!感谢。

1 个答案:

答案 0 :(得分:2)

基本上非常简单 rdd.reduceByKey(Math.min(_,_)) - 这是针对scala

在python中我猜它会是
rdd.reduceByKey(lambda (x,y) : min(x,y))