以下是Spark中join算子的用法和示例:
1.内连接(inner join):返回两个RDD中键相同的元素对,类似于SQL中的INNER JOIN操作。
```scala
val rdd1 = sc.parallelize(Seq((1, "A"), (2, "B"), (3, "C")))
val rdd2 = sc.parallelize(Seq((1, "D"), (2, "E"), (4, "F")))
val result = rdd1.join(rdd2)
result.foreach(println)
```
输出结果为:
```
(1,(A,D))
(2,(B,E))
```
2.左外连接(left outer join):返回左侧RDD中所有的元素以及右侧RDD中键相同的元素对,如果右侧RDD中没有匹配的元素,则用None表示。
```scala
val rdd1 = sc.parallelize(Seq((1, "A"), (2, "B"), (3, "C")))
val rdd2 = sc.parallelize(Seq((1, "D"), (2, "E"), (4, "F")))
val result = rdd1.leftOuterJoin(rdd2)
result.foreach(println)
```
输出结果为:
```
(1,(A,Some(D)))
(2,(B,Some(E)))
(3,(C,None))
```
3.右外连接(right outer join):返回右侧RDD中所有的元素以及左侧RDD中键相同的元素对,如果左侧RDD中没有匹配的元素,则用None表示。
```scala
val rdd1 = sc.parallelize(Seq((1, "A"), (2, "B"), (3, "C")))
val rdd2 = sc.parallelize(Seq((1, "D"), (2, "E"), (4, "F")))
val result = rdd1.rightOuterJoin(rdd2)
result.foreach(println)
```
输出结果为:
```
(1,(Some(A),D))
(2,(Some(B),E))
(4,(None,F))
```
4.全外连接(full outer join):返回左右两侧RDD中所有的元素以及键相同的元素对,如果左右两侧RDD中没有匹配的元素,则用None表示。
```scala
val rdd1 = sc.parallelize(Seq((1, "A"), (2, "B"), (3, "C")))
val rdd2 = sc.parallelize(Seq((1, "D"), (2, "E"), (4, "F")))
val result = rdd1.fullOuterJoin(rdd2)
result.foreach(println)
```
输出结果为:
```
(1,(Some(A),Some(D)))
(2,Some(B),Some(E)))
(3,(Some(C),None))
(4,(None,Some(F)))
```