开发者学堂课程【大数据Spark2020最新课程(知识精讲与实战演练)第二阶段:RDD 算子_转换 join】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/689/detail/11976
RDD 算子_转换 join
内容介绍
一、前言
二、 join 的规则
三、实例
四、结论
一、前言
在学习前面的内容之后,我们继续学习 RDD 算子。在我们的工作当中,是很有可能要对两个数据集进行一个连接。在RDD 中会用到一个新的算子去进行连接,叫做 join 。
二、 join 的规则
如图所示,假设有这样的两个 RDD ,都是 keyValue 型。现在让
RDD1去 join RDD2 ,结果是右边的 RDD3 。
可以看到的是,在经过 join 操作后, RDD1 的第一项与 RDD2 的所
有项进行了计算,生成了(" a ",(1,1))和(" a ",(1,10)),RDD1 的
第二项也是如此。
但是结果中没有与“b ”相关的结果,原因是 RDD2 中没有“ b ”,
没办法进行 join 操作。 join 操作非常简单,仅仅是一个方法的调用。
三、实例
在了解了 join 的规则后,我们开始来写代码,也是很简单的。先创建一个方法,叫做 join ,把集合复制过来。如果是 RDD1 join RDD2 ,直接写就好,它会默认地按照 Key 进行交流。
然后就可以直接 collect ,再去 foreach ,然后进行收集,最后运行代码,检验结果,得出结论。
代码如下:
@Test
def join() : Unit = {
val rdd1 = sc.parallelize(Seq(("a",1),("a",2),("b",1)))
val rdd2 = sc.parallelize(Seq(("a",10),("a",11),("a",12)))
rdd1.join(rdd2)
.collect()
.foreach(println(_))
}
四、结论
通过的出的结果,可以发现这个过程非常类似于笛卡尔集,也非常类似于内连接。这就是 join 算子,以后会有比较大的使用。
比如生成了一个笛卡尔集,可以用来过滤一些数据。