1. 程式人生 > >Spark SQL如何實現mysql的union操作

Spark SQL如何實現mysql的union操作

簡介


今天聊了聊一個小小的基礎題,union和union all的區別:

union all是直接連線,取到得是所有值,記錄可能有重複  
union 是取唯一值,記錄沒有重複  
1、UNION 的語法如下:

[SQL 語句 1]
     UNION
[SQL 語句 2]

2、UNION ALL 的語法如下:

[SQL 語句 1]
     UNION ALL
[SQL 語句 2]


對比總結:

UNION和UNION ALL關鍵字都是將兩個結果集合併為一個,但這兩者從使用和效率上來說都有所不同。

1、對重複結果的處理:UNION在進行錶鏈接後會篩選掉重複的記錄,Union All不會去除重複記錄。

2、對排序的處理:Union將會按照欄位的順序進行排序;UNION ALL只是簡單的將兩個結果合併後就返回。

從效率上說,UNION ALL 要比UNION快很多,所以,如果可以確認合併的兩個結果集中不包含重複資料且不需要排序時的話,那麼就使用UNION ALL。


Spark SQL

實際上Spark SQL的DataSet的API是沒有union all操作的,只有union操作,而且其union操作就是union all操作。

此時要實現union操作,需要在union之後加上distinct操作。

sales.union(sales).show()

輸出結果是有重複資料的

640?wx_fmt=png

需要將操作更改為:

sales.union(sales).distinct().show()


推薦閱讀:

Spark SQL的幾個里程碑!

Table API&SQL的基本概念及使用介紹

Spark SQL用UDF實現按列特徵重分割槽

640?wx_fmt=png