开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段:连接操作_连接类型_fullouter】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/690/detail/12099
连接操作_连接类型_fullouter
连接类型
1.全外连接
外连接和内连接的区别:
内连接示意图:内连接连接的部分就像是两个椭圆相交的部分。
外连接连接的是包含中间相交数据、左边数据及右边数据或者两边的数据。
内连接和外连接的最大区别,就是内连接的结果集中只有可以连接上的数据,而外连接可以包含没有连接上的数据,根据情况的不同,外连接又可以分为很多种,比如所有的没连接上的数据都放入结果集,就叫做全外连接。如图:
全外连接和交叉连接的区别:
全外连接是将没有连接上的单条数据显示出来,而 crossJoin 是将所有能连接的可能性组显示出来。
SQL 语句
select * from person full outer join cities on
person . cityId = cities .id
Dataset 操作
person . join ( right = cities ,
joinExprs = person ( "cityId") === cities ( "id" ),
joinType = "full")i / "outer" , "full", "full_outer"
.show ()
下面介绍使用 sql 语句和命令式 API 如何编写全外连接,进入代码:
@Test
def fullouter(): unit = {
//内连接,就是只显示能连接上的数据;外连接包含一部分没有连接上的数据;全外连接,指左右两边没有连接上的数据,都显示出来
person.join(cities,
person.col( colName = "cityId" ) === cities.col( colName = "id"),joinType = "full")
.show( )
/使用 sql 语句
spark.sql( sqlText = "select p.id,p.name,c.name "
+“from person p full outer join cities " +
"on person.cityId = cities.id")
.show()
}
运行代码得到结果集:
发现:Danial 是没有能连接上的城市,上海是没有和它连接的用户。
全外连接的 joinType 是 full、outer 或者 fullouter。