必看!Spark 进阶之路之「SparkSQL」入门概述 | 博文精选
作者 |?Alice菌
責編 |?Carol
來源 | CSDN 博客
封圖 | CSDN付費下載于視覺中國
在之前的文章中,我們已經完成了對于Spark核心SparkCore的詳細介紹。而今天想為為大家介紹的是SparkSQL的概述。
什么是Spark SQL?
Spark SQL是Spark用來處理結構化數據的一個模塊,它提供了2個編程抽象:DataFrame和DataSet,并且作為分布式SQL查詢引擎的作用。
我們已經學習了Hive,它是將Hive SQL轉換成MapReduce然后提交到集群上執行,大大簡化了編寫MapReduc的程序的復雜性,由于MapReduce這種計算模型執行效率比較慢。所有Spark SQL的應運而生,它是將Spark SQL轉換成RDD,然后提交到集群執行,執行效率非常快!
Spark SQL的特點
1)易整合
2)統一的數據訪問方式
3)兼容Hive
4)標準的數據連接
什么是DataFrame?
與RDD類似,DataFrame也是一個分布式數據容器。然而DataFrame更像傳統數據庫的二維表格,除了數據以外,還記錄數據的結構信息,即schema。
同時,與Hive類似,DataFrame也支持嵌套數據類型(struct、array和map)。從API易用性的角度上看,DataFrame API提供的是一套高層的關系操作,比函數式的RDD API要更加友好,門檻更低。
上圖直觀地體現了DataFrame和RDD的區別。左側的RDD[Person]雖然以Person為類型參數,但Spark框架本身不了解Person類的內部結構。而右側的DataFrame卻提供了詳細的結構信息,使得Spark SQL可以清楚地知道該數據集中包含哪些列,每列的名稱和類型各是什么。
DataFrame是為數據提供了Schema的視圖。可以把它當做數據庫中的一張表來對待,DataFrame也是懶執行的。性能上比RDD要高,主要原因:
優化的執行計劃:查詢計劃通過Spark catalyst optimiser(Spark的優化器)進行優化。
比如下面一個例子:
為了說明查詢優化,我們來看上圖展示的人口數據分析的示例。圖中構造了兩個DataFrame,將它們join之后又做了一次filter操作。如果原封不動地執行這個執行計劃,最終的執行效率是不高的。因為join是一個代價較大的操作,也可能會產生一個較大的數據集。如果我們能將filter下推到 join下方,先對DataFrame進行過濾,再join過濾后的較小的結果集,便可以有效縮短執行時間。而Spark SQL的查詢優化器正是這樣做的。
簡而言之,邏輯查詢計劃優化就是一個利用基于關系代數的等價變換,將高成本的操作替換為低成本操作的過程。
什么是DataSet?
1)是Dataframe API的一個擴展,是Spark最新的數據抽象。
2)用戶友好的API風格,既具有類型安全檢查也具有Dataframe的查詢優化特性。
3)Dataset支持編解碼器,當需要訪問非堆上的數據時可以避免反序列化整個對象,提高了效率。
4)樣例類被用來在Dataset中定義數據的結構信息,樣例類中每個屬性的名稱直接映射到DataSet中的字段名稱。
5)Dataframe是Dataset的特列,DataFrame=Dataset[Row] ,所以可以通過as方法將Dataframe轉換為Dataset。Row是一個類型,跟Car、Person這些的類型一樣,所有的表結構信息我都用Row來表示。
6)DataSet是強類型的。比如可以有Dataset[Car],Dataset[Person]
7)DataFrame只是知道字段,但是不知道字段的類型,所以在執行這些操作的時候是沒辦法在編譯的時候檢查是否類型失敗的,比如你可以對一個String進行減法操作,在執行的時候才報錯,而DataSet不僅僅知道字段,而且知道字段類型,所以有更嚴格的錯誤檢查。就跟JSON對象和類對象之間的類比。
本次分享就到這里,你還有什么想知道的或者對本文有什么建議,歡迎在評論區告訴我們!
在全民抗疫的特殊時期下,在人員復雜、流動量大地方的出入口處都設置了無接觸式無感紅外人體測溫系統。
在這次疫情防控中,無感人體測溫系統發揮了怎樣的作用?高精準的無感人體測溫系統的核心技術武器是什么?對于開發者們來說,大家應該了解哪些技術?
明晚7點《多場景疫情防控:解讀云邊端聯動下的全棧 AI 技術應用》
推薦閱讀:什么是 CD 管道?一文告訴你如何借助Kubernetes、Ansible和Jenkins創建CD管道! 淘寶千萬級并發架構的十四次演進 獨家揭秘阿里自研飛天操作系統洛神平臺如何支撐起 2684 億全球大促!| 問底中國 IT 技術演進 GitHub 一周熱點速覽:手撕 LeetCode 一日 star 破兩千 6個步驟,告訴你如何用樹莓派和機器學習DIY一個車牌識別器!(附詳細分析) 智能合約初探:概念與演變 真香,朕在看了!總結
以上是生活随笔為你收集整理的必看!Spark 进阶之路之「SparkSQL」入门概述 | 博文精选的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GitHub 接连封杀开源项目惹众怒,C
- 下一篇: 程序员去交友网站找女友,没想到找到了这个