1. 程式人生 > >2-2、spark的union和join操作演示

2-2、spark的union和join操作演示

spark的union和join操作演示

union簡介:

通常如果我們需要將兩個select語句的結果作為一個整體顯示出來,我們就需要用到union或者union all關鍵字。union(或稱為聯合)的作用是將多個結果合併在一起顯示出來。

Union:將兩個RDD進行合併,不去重

Join連線:

SQL中大概有這麼幾種JOIN:

cross join  交叉連線(笛卡爾積)

inner join  內連線

left outer join  左外連線(左面有的,右面沒有的,右面填NULL)

right outer join  右外連線

full outer join   全連線

spark的union和join操作演示如下:

窄依賴:子RDD只依賴父RDD中的一個分割槽

寬依賴:子RDD可以依賴父RDD中的多個分割槽

union只能產生窄依賴

join既能產生窄依賴,也能產生寬依賴

 

建立rdd1:

scala> val rdd1=sc.parallelize(List(('a',2),('b',4),('c',6),('d',9)))

rdd1:org.apache.spark.rdd.RDD[(Char, Int)] = ParallelCollectionRDD[6] at parallelizeat <console>:15

建立rdd2:

scala> valrdd2=sc.parallelize(List(('c',6),('c',7),('d',8),('e',10)))

rdd2:org.apache.spark.rdd.RDD[(Char, Int)] = ParallelCollectionRDD[7] at parallelizeat <console>:15

執行union:

scala> val unionrdd=rdd1 union rdd2

unionrdd: org.apache.spark.rdd.RDD[(Char,Int)] = UnionRDD[8] at union at <console>:19

union結果:

scala> unionrdd.collect
res2: Array[(Char, Int)] = Array((a,2),(b,4), (c,6), (d,9), (c,6), (c,7), (d,8), (e,10))

執行:join:

scala> val joinrdd=rdd1 join rdd2

joinrdd: org.apache.spark.rdd.RDD[(Char,(Int, Int))] = MapPartitionsRDD[11] at join at <console>:19

join結果:

scala>joinrdd.collect
res3: Array[(Char,(Int, Int))] = Array((d,(9,8)), (c,(6,6)), (c,(6,7)))