目录

  • ​​spark outline​​
  • ​​Spark join和cogroup 功能​​
  • ​​案例演示​​

spark outline

​​大纲目录​​

Spark join和cogroup 功能

SQL分类:
(1)内连接 join
等值连接
非等值连接
自连接

(2)外连接
左(外)连接 leftOuterJoin
右(外)连接 rightOuterJoin
全连接 fullOuterJoin

cogroup:类似全连接(所有数据一条也不差,当左表中没的数据,补为None;当右表中没的数据,补为None)

案例演示

package com.xcu.bigdata.spark.core.pg02_rdd.pg022_rdd_transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
* @Desc : SQL分类
* &一 内连接
* 1 等值连接
* 2 非等值连接
* 3 自连接
* &二 外连接
* 1 左(外)连接
* 2 右(外)连接
* 3 全连接
*/
object Spark20_Join_Cogroup {
def main(args: Array[String]): Unit = {
//创建配置文件
val conf: SparkConf = new SparkConf().setAppName("Spark20_Join").setMaster("local[*]")
//创建SparkContext,该对象是提交的入口
val sc = new SparkContext(conf)
//创建第一个RDD
val rdd1: RDD[(Int, String)] = sc.makeRDD(Array((1, "a"), (2, "b"), (2, "c"), (3, "d")))
//创建第二个pairRDD
val rdd2: RDD[(Int, Int)] = sc.makeRDD(Array((1, 4), (2, 5), (4, 6), (2, 8)))
//内连接(等值连接)
//join算子相当于内连接,将两个RDD中的key相同的数据匹配,如果key匹配不上,那么数据不关联
val resRDD1: RDD[(Int, (String, Int))] = rdd1.join(rdd2)
//打印输出
resRDD1.collect().foreach(println)
println("*************************************")
val resRDD2: RDD[(Int, (Int, String))] = rdd2.join(rdd1)
//打印输出
resRDD2.collect().foreach(println)
println("*************************************")
//外连接
//左外连接((等值连接)(左连接以左表为基准))
val resRDD3: RDD[(Int, (String, Option[Int]))] = rdd1.leftOuterJoin(rdd2)
//打印输出
resRDD3.collect().foreach(println)
println("*************************************")
//cogroup:分区内先进行连接
//cogroup:类似全连接(所有数据一条也不差,当左表中没的数据,补为None;当右表中没的数据,补为None;)
val resRDD4: RDD[(Int, (Iterable[String], Iterable[Int]))] = rdd1.cogroup(rdd2)
//打印输出
resRDD3.collect().foreach(println)
//释放资源
sc.stop()
}
}

输出结果

(1,(a,4))
(2,(b,5))
(2,(b,8))
(2,(c,5))
(2,(c,8))
*************************************
(1,(4,a))
(2,(5,b))
(2,(5,c))
(2,(8,b))
(2,(8,c))
+++++++++++++++++++++++++++++++++++++
(1,(a,Some(4)))
(2,(b,Some(5)))
(2,(b,Some(8)))
(2,(c,Some(5)))
(2,(c,Some(8)))
(3,(d,None))
-------------------------------------
(1,(a,Some(4)))
(2,(b,Some(5)))
(2,(b,Some(8)))
(2,(c,Some(5)))
(2,(c,Some(8)))
(3,(d,None))

Process finished with exit code 0