说明
类似 SQL 中的 full join
与 join() 类似又不同,返回的RDD是 key-value结构:
- key:包含 RDD1 和 RDD2 所有的 key
- value:
- 相同key相对应的value组合在一起
- 没有对应的key就空着(会显示出来)
- rdd内相同的key的value也会组合
例子
val sparConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
val sc = new SparkContext(sparConf)
val rdd1:RDD[(String,Int)] = sc.makeRDD(List(("李雷",182),("韩梅梅",169),("lili",170)))
val rdd2:RDD[(String,String)] = sc.makeRDD(List(("lucy","女"),("李雷","男"),("韩梅梅","女")))
val resRDD:RDD[(String, (Iterable[Int],Iterable[String]))]=rdd1.cogroup( rdd2)
resRDD.collect().foreach(println)
sc.stop()
执行结果:
(lili,(CompactBuffer(170),CompactBuffer())) //没有对应的key就空着
(李雷,(CompactBuffer(182),CompactBuffer(男)))
(韩梅梅,(CompactBuffer(169),CompactBuffer(女)))
(lucy,(CompactBuffer(),CompactBuffer(女))) //没有对应的key就空着
rdd内相同key的value也会组合
rdd内相同的key的value也会组合
val sparConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
val sc = new SparkContext(sparConf)
val rdd1:RDD[(String,Int)] = sc.makeRDD(List(("李雷",182),("韩梅梅",169),("lili",170),("李雷",185)))
val rdd2:RDD[(String,String)] = sc.makeRDD(List(("lucy","女"),("李雷","男"),("韩梅梅","女"),("韩梅梅","女")))
val resRDD:RDD[(String, (Iterable[Int],Iterable[String]))]=rdd1.cogroup( rdd2)
resRDD.collect().foreach(println)
sc.stop()

