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)))