1. 程式人生 > >Spark DataFrame中的join使用說明

Spark DataFrame中的join使用說明

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 

左外連線

左聯接:是以左表為基準,將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