spark sql 中join的類型
Spark DataFrame中join與SQL很像,都有inner join, left join, right join, full join;
| 類型 | 說明 |
| inner join | 內連接 |
| left join | 左連接 |
| right join | 右連接 |
| full join | 全連接 |
spark join 看其原型
def join(right : DataFrame, usingColumns : Seq[String], joinType : String) : DataFrame
def join(right : DataFrame, joinExprs : Column, joinType : String) : DataFrame
joinType可以是”inner”、“left”、“right”、“full”分別對應inner join, left join, right join, full join,默認值是”inner”,代表內連接
例子:
a表
| id | job |
| 1 | 張3 |
| 2 | 李四 |
| 3 | 王武 |
b表
| id | job | parent_id |
| 1 | 23 | 1 |
| 2 | 34 | 2 |
| 3 | 34 | 4 |
內連接
內連接:內連接查詢操作列出與連接條件匹配的數據行,它使用比較運算符比較被連接列的列值。
df.join(df, Seq("city", "state"), "inner").show
df.join(df, Seq("city", "state")).show
Seq是指連接的字段,這個相當於
SELECT a.au_fname, a.au_lname, p.pub_name FROM authors AS a INNER JOIN publishers AS p ON a.city = p.city AND a.state = p.state ORDER BY a.au_lname ASC, a.au_fname ASC
結果是
1 張三 1 23 1
2 李四 2 34 2
內連接指定列名
df.join(df, $"city"===$"city", "inner").show df.join(df, $"city"===$"city").show
左外連接
左聯接:是以左表為基准,將a.stuid = b.stuid的數據進行連接,然后將左表沒有的對應項顯示,右表的列為NULL
df.join(df, Seq("city", "state"), "left").show
結果是
1 張三 1 23 1
2 李四 2 34 2
3 王武 null null null
