Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何删除RDD[(Int,Int)]中重复的seond值,并将第一个值中的一个保留在Spark中?_Scala_Apache Spark_Rdd - Fatal编程技术网

Scala 如何删除RDD[(Int,Int)]中重复的seond值,并将第一个值中的一个保留在Spark中?

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(第二个元素) 那么我应该如何

我有一个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(第二个元素)

那么我应该如何获得这个呢?类似于.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)

希望这有帮助。

您的输入是否遗漏了什么?我在那里没有看到重复项,或者我遗漏了重复项的定义