1. 程式人生 > >Spark運算元:RDD鍵值轉換操作(5)–leftOuterJoin、rightOuterJoin、subtractByKey

Spark運算元:RDD鍵值轉換操作(5)–leftOuterJoin、rightOuterJoin、subtractByKey

關鍵字:Spark運算元、Spark RDD鍵值轉換、leftOuterJoin、rightOuterJoin、subtractByKey

leftOuterJoin

def leftOuterJoin[W](other: RDD[(K, W)]): RDD[(K, (V, Option[W]))]

def leftOuterJoin[W](other: RDD[(K, W)], numPartitions: Int): RDD[(K, (V, Option[W]))]

def leftOuterJoin[W](other: RDD[(K, W)], partitioner: Partitioner): RDD[(K, (V, Option[W]))]

leftOuterJoin類似於SQL中的左外關聯left outer join,返回結果以前面的RDD為主,關聯不上的記錄為空。只能用於兩個RDD之間的關聯,如果要多個RDD關聯,多關聯幾次即可。

引數numPartitions用於指定結果的分割槽數

引數partitioner用於指定分割槽函式

  1. var rdd1 = sc.makeRDD(Array(("A","1"),("B","2"),("C","3")),2)
  2. var rdd2 = sc.makeRDD(Array(("A","a"),("C","c"),("D","d")),2)
  3. scala> rdd1.leftOuterJoin
    (rdd2).collect
  4. res11:Array[(String,(String,Option[String]))]=Array((B,(2,None)),(A,(1,Some(a))),(C,(3,Some(c))))

rightOuterJoin

def rightOuterJoin[W](other: RDD[(K, W)]): RDD[(K, (Option[V], W))]

def rightOuterJoin[W](other: RDD[(K, W)], numPartitions: Int): RDD[(K, (Option[V], W))]

def rightOuterJoin[W](other: RDD[(K, W)], partitioner: Partitioner): RDD[(K, (Option[V], W))]

rightOuterJoin類似於SQL中的有外關聯right outer join,返回結果以引數中的RDD為主,關聯不上的記錄為空。只能用於兩個RDD之間的關聯,如果要多個RDD關聯,多關聯幾次即可。

引數numPartitions用於指定結果的分割槽數

引數partitioner用於指定分割槽函式

  1. var rdd1 = sc.makeRDD(Array(("A","1"),("B","2"),("C","3")),2)
  2. var rdd2 = sc.makeRDD(Array(("A","a"),("C","c"),("D","d")),2)
  3. scala> rdd1.rightOuterJoin(rdd2).collect
  4. res12:Array[(String,(Option[String],String))]=Array((D,(None,d)),(A,(Some(1),a)),(C,(Some(3),c)))

subtractByKey

def subtractByKey[W](other: RDD[(K, W)])(implicit arg0: ClassTag[W]): RDD[(K, V)]

def subtractByKey[W](other: RDD[(K, W)], numPartitions: Int)(implicit arg0: ClassTag[W]): RDD[(K, V)]

def subtractByKey[W](other: RDD[(K, W)], p: Partitioner)(implicit arg0: ClassTag[W]): RDD[(K, V)]

subtractByKey和基本轉換操作中的subtract類似

引數numPartitions用於指定結果的分割槽數

引數partitioner用於指定分割槽函式

  1. var rdd1 = sc.makeRDD(Array(("A","1"),("B","2"),("C","3")),2)
  2. var rdd2 = sc.makeRDD(Array(("A","a"),("C","c"),("D","d")),2)
  3. scala> rdd1.subtractByKey(rdd2).collect
  4. res13:Array[(String,String)]=Array((B,2))

更多關於Spark運算元的介紹,可參考spark運算元系列文章:

http://blog.csdn.net/ljp812184246/article/details/53895299