Apache spark 基于spark中的值删除重复关键点

Apache spark 基于spark中的值删除重复关键点,apache-spark,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)).red

假设我通过并行化键值对列表[(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)
前三个转换允许我按值排序,最后一个简单地删除重复键(因为我的元组是按值排序的,现在值最小的元组副本保留在tact中)。这很好,但我觉得这样做肯定会使事情过于复杂,导致性能过高。有人知道如何把这个简化一点吗?非常感谢您的帮助!谢谢。

基本上很简单
rdd.reduceByKey(Math.min(,))
——这是针对scala的

在python中,我想应该是

rdd.reduceByKey(lambda(x,y):min(x,y))
rdd.reduceByKey(Math.min(u,u))
对于答案来说太简单了哇,太简单了。谢谢大家!@aaronman+1-可以将其放在答案中,以便将问题标记为已接受?@Leeren您没有提到RDD是如何分区的,以及您希望在该操作后如何分区。如果您不介意,上面的解决方案很好,但它会在重新分区时引入通信。根据您的需要,您可能希望确保原始RDD按键进行分区(使用自定义分区器),然后使用RDD的mapPartitions方法进行缩减,lambda的每个实例都必须处理多个不同的键,但一个键的所有实例都将在同一个分区中。@maasg done,我有点希望他删除这个问题或是别的什么