Scala 如何删除RDD[(Int,Int)]中重复的seond值,并将第一个值中的一个保留在Spark中?
我有一个RDD,如下所示:Scala 如何删除RDD[(Int,Int)]中重复的seond值,并将第一个值中的一个保留在Spark中?,scala,apache-spark,rdd,Scala,Apache Spark,Rdd,我有一个RDD,如下所示: val rdd1 = sc.parallelize(Array((1,2),(2,3),(4,5),(5,2),(4,3))) 这是RDD[(Int,Int)]我想基于这个元组中的第二个元素删除一些重复的值。不管第一个元素在结果中保留什么,唯一的事情就是删除重复的第二个值。 在本例中,结果可以是: (1,2) (2,3) (4,5) 或 或者,因为第二个元素2,3是重复的。但是,结果必须包含(4,5),因为它在这个rdd中只有一个5(第二个元素) 那么我应该如何
val rdd1 = sc.parallelize(Array((1,2),(2,3),(4,5),(5,2),(4,3)))
这是RDD[(Int,Int)]
我想基于这个元组中的第二个元素删除一些重复的值。不管第一个元素在结果中保留什么,唯一的事情就是删除重复的第二个值。在本例中,结果可以是:
(1,2)
(2,3)
(4,5)
或
或者,因为第二个元素2,3是重复的。但是,结果必须包含(4,5),因为它在这个rdd中只有一个5(第二个元素)
那么我应该如何获得这个呢?类似于.unique()或reduceByKey()的内容?
非常感谢。您可以将第二个整数转换为key,然后使用reduceByKey将其切换回。像这样的
val rdd1 = ps.sparkSession.sparkContext.parallelize(Array((1,2),(2,3),(4,5),(5,2),(4,3)))
val rdd2 = rdd1.map(x => (x._2, x._1)).reduceByKey((x, y) => x).map(x => (x._2, x._1))
rdd2.collect().foreach(println)
(2,3)
(4,5)
(1,2)
结果是这样的
val rdd1 = ps.sparkSession.sparkContext.parallelize(Array((1,2),(2,3),(4,5),(5,2),(4,3)))
val rdd2 = rdd1.map(x => (x._2, x._1)).reduceByKey((x, y) => x).map(x => (x._2, x._1))
rdd2.collect().foreach(println)
(2,3)
(4,5)
(1,2)
希望这有帮助。您的输入是否遗漏了什么?我在那里没有看到重复项,或者我遗漏了重复项的定义