spark3.0教程:RDD转换算子cogroup()

说明

类似 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()

原文出处:/show_1IX1NoYkgsrj.html