Spark DataFrame中的join使用說明
阿新 • • 發佈:2019-01-10
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_nameFROM 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
左外連線
左聯接:是以左表為基準,將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