我使用带有scala的spark 1.2并且有一对RDD with(String,String)。示例记录如下所示:
<Key, value>
id_1, val_1_1; val_1_2
id_2, val_2_1; val_2_2
id_3, val_3_1; val_3_2
id_1, val_4_1; val_4_2
我只想删除所有带有重复键的记录,因此在上面的示例中,第四条记录将被删除,因为id_1是一个重复键。
请帮助。
感谢。
答案 0 :(得分:11)
您可以使用reduceByKey
:
val rdd: RDD[(K, V)] = // ...
val res: RDD[(K, V)] = rdd.reduceByKey((v1, v2) => v1)
答案 1 :(得分:1)
如果有必要始终选择给定键的第一个条目,那么将@JeanLogeart答案与来自@Paul的评论相结合,
import org.apache.spark.{SparkContext, SparkConf}
val data = List(
("id_1", "val_1_1; val_1_2"),
("id_2", "val_2_1; val_2_2"),
("id_3", "val_3_1; val_3_2"),
("id_1", "val_4_1; val_4_2") )
val conf = new SparkConf().setMaster("local").setAppName("App")
val sc = new SparkContext(conf)
val dataRDD = sc.parallelize(data)
val resultRDD = dataRDD.zipWithIndex.map{
case ((key, value), index) => (key, (value, index))
}.reduceByKey((v1,v2) => if(v1._2 < v2._2) v1 else v2).mapValues(_._1)
resultRDD.collect().foreach(v => println(v))
sc.stop()