欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > Spark SQL的整體實現邏輯解析

Spark SQL的整體實現邏輯解析

熱門標簽:地圖標注如何弄全套標 武漢AI電銷機器人 電銷機器人 深圳 實體店地圖標注怎么標 在電子版地圖標注要收費嗎 萬利達綜合醫院地圖標注點 南京電銷外呼系統哪家好 股票配資電銷機器人 外呼系統會封嗎

1、sql語句的模塊解析

   當我們寫一個查詢語句時,一般包含三個部分,select部分,from數據源部分,where限制條件部分,這三部分的內容在sql中有專門的名稱:

當我們寫sql時,如上圖所示,在進行邏輯解析時會把sql分成三個部分,project,DataSource,Filter模塊,當生成執行部分時又把他們稱為:Result模塊、

DataSource模塊和Opertion模塊。

那么在關系數據庫中,當我們寫完一個查詢語句進行執行時,發生的過程如下圖所示:

整個執行流程是:query -> Parse -> Bind -> Optimize -> Execute

1、寫完sql查詢語句,sql的查詢引擎首先把我們的查詢語句進行解析,也就是Parse過程,解析的過程是把我們寫的查詢語句進行分割,把project,DataSource和Filter三個部分解析出來從而形成一個邏輯解析tree,在解析的過程中還會檢查我們的sql語法是否有錯誤,比如缺少指標字段、數據庫中不包含這張數據表等。當發現有錯誤時立即停止解析,并報錯。當順利完成解析時,會進入到Bind過程。

2、Bind過程,通過單詞我們可看出,這個過程是一個綁定的過程。為什么需要綁定過程?這個問題需要我們從軟件實現的角度去思考,如果讓我們來實現這個sql查詢引擎,我們應該怎么做?他們采用的策略是首先把sql查詢語句分割,分割不同的部分,再進行解析從而形成邏輯解析tree,然后需要知道我們需要取數據的數據表在哪里,需要哪些字段,執行什么邏輯,這些都保存在數據庫的數據字典中,因此bind過程,其實就是把Parse過程后形成的邏輯解析tree,與數據庫的數據字典綁定的過程。綁定后會形成一個執行tree,從而讓程序知道表在哪里,需要什么字段等等

3、完成了Bind過程后,數據庫查詢引擎會提供幾個查詢執行計劃,并且給出了查詢執行計劃的一些統計信息,既然提供了幾個執行計劃,那么有比較就有優劣,數據庫會根據這些執行計劃的統計信息選擇一個最優的執行計劃,因此這個過程是Optimize(優化)過程。

4、選擇了一個最優的執行計劃,那么就剩下最后一步執行Execute,最后執行的過程和我們解析的過程是不一樣的,當我們知道執行的順序,對我們以后寫sql以及優化都是有很大的幫助的.執行查詢后,他是先執行where部分,然后找到數據源之數據表,最后生成select的部分,我們的最終結果。執行的順序是:operation->DataSource->Result

雖然以上部分對SparkSQL沒有什么聯系,但是知道這些,對我們理解SparkSQL還是很有幫助的。

2、SparkSQL框架的架構

要想對這個框架有一個清晰的認識,首先我們要弄清楚,我們為什么需要sparkSQL呢?個人建議一般情況下在寫sql能夠直接解決的問題就不要使用sparkSQL,如果想刻意使用sparkSQL,也不一定能夠加快開發的進程。使用sparkSQL是為了解決一般用sql不能解決的復雜邏輯,使用編程語言的優勢來解決問題。我們使用sparkSQL一般的流程如下圖:

如上圖所示,一般情況下分為兩個部分:a、把數據讀入到sparkSQL中,sparkSQL進行數據處理或者算法實現,然后再把處理后的數據輸出到相應的輸出源中。

1、同樣我們也是從如果讓我們開發,我們應該怎么做,需要考慮什么問題來思考這個問題。

     a、第一個問題是,數據源有幾個,我們可能從哪些數據源讀取數據?現在sparkSQL支持很多的數據源,比如:hive數據倉庫、json文件,.txt,以及orc文件,同時現在還支持jdbc從關系數據庫中取數據。功能很強大。

     b、還一個需要思考的問題是數據類型怎么映射啊?我們知道當我們從一個數據庫表中讀入數據時,我們定義的表結構的字段的類型和編程語言比如scala中的數據類型映射關系是怎樣的一種映射關系?在sparkSQL中有一種來解決這個問題的方法,來實現數據表中的字段類型到編程語言數據類型的映射關系。這個以后詳細介紹,先了解有這個問題就行。

     c、數據有了,那么在sparkSQL中我們應該怎么組織這些數據,需要什么樣的數據結構呢,同時我們對這些數據都可以進行什么樣的操作?sparkSQL采用的是DataFrame數據結構來組織讀入到sparkSQL中的數據,DataFrame數據結構其實和數據庫的表結構差不多,數據是按照行來進行存儲,同是還有一個schema,就相當于數據庫的表結構,記錄著每一行數據屬于哪個字段。

     d、當數據處理完以后,我們需要把數據放入到什么地方,并切以什么樣的格式進行對應,這個a和b要解決的問題是相同的。

2、sparkSQL對于以上問題的實現邏輯也很明確,從上圖已經很清楚,主要分為兩個階段,每個階段都對應一個具體的類來實現。

   a、 對于第一個階段,sparkSQL中存在兩個類來解決這些問題:HiveContext,SQLContext,同時hiveContext繼承了SQLContext的所有方法,同時又對其進行了擴展。因為我們知道, hive和mysql的查詢還是有一定的差別的。HiveContext只是用來處理從hive數據倉庫中讀入數據的操作,SQLContext可以處理sparkSQL能夠支持的剩下的所有的數據源。這兩個類處理的粒度是限制在對數據的讀寫上,同時對表級別的操作上,比如,讀入數據、緩存表、釋放緩存表表、注冊表、刪除注冊的表、返回表的結構等的操作。

  b、sparkSQL處理讀入的數據,采用的是DataFrame中提供的方法。因為當我們把數據讀入到sparkSQL中,這個數據就是DataFrame類型的。同時數據都是按照Row進行存儲的。其中 DataFrame中提供了很多有用的方法。以后會細說。

 c、在spark1.6版本以后,又增加了一個類似于DataFrame的數據結構Dataset,增加此數據結構的目的是DataFrame有軟肋,他只能處理按照Row進行存儲的數據,并且只能使用DataFrame中提供的方法,我們只能使用一部分RDD提供的操作。實現Dataset的目的就是讓我們能夠像操作RDD一樣來操作sparkSQL中的數據。

d、其中還有一些其他的類,但是現在在sparkSQL中最主要的就是上面的三個類,其他類以后碰到了會慢慢想清楚。

3、sparkSQL的hiveContext和SQLContext的運行原理

  hiveContext和SQLContext與我第一部分講到的sql語句的模塊解析實現的原理其實是一樣的,采用了同樣的邏輯過程,并且網上有好多講這一塊的,就直接粘貼復制啦!!

  sqlContext總的一個過程如下圖所示:

1.SQL語句經過SqlParse解析成UnresolvedLogicalPlan;

2.使用analyzer結合數據數據字典(catalog)進行綁定,生成resolvedLogicalPlan;

3.使用optimizer對resolvedLogicalPlan進行優化,生成optimizedLogicalPlan;

4.使用SparkPlan將LogicalPlan轉換成PhysicalPlan;

5.使用prepareForExecution()將PhysicalPlan轉換成可執行物理計劃;

6.使用execute()執行可執行物理計劃;

7.生成SchemaRDD。

在整個運行過程中涉及到多個SparkSQL的組件,如SqlParse、analyzer、optimizer、SparkPlan等等

hiveContext總的一個過程如下圖所示:

1.SQL語句經過HiveQl.parseSql解析成Unresolved LogicalPlan,在這個解析過程中對hiveql語句使用getAst()獲取AST樹,然后再進行解析;

2.使用analyzer結合數據hive、源數據Metastore(新的catalog)進行綁定,生成resolved LogicalPlan;

3.使用optimizer對resolved LogicalPlan進行優化,生成optimized LogicalPlan,優化前使用了ExtractPythonUdfs(catalog.PreInsertionCasts(catalog.CreateTables(analyzed)))進行預處理;

4.使用hivePlanner將LogicalPlan轉換成PhysicalPlan;

5.使用prepareForExecution()將PhysicalPlan轉換成可執行物理計劃;

6.使用execute()執行可執行物理計劃;

7.執行后,使用map(_.copy)將結果導入SchemaRDD。

到此這篇關于Spark SQL的整體實現邏輯的文章就介紹到這了,更多相關Spark SQL實現邏輯內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Spark SQL常見4種數據源詳解
  • Spark學習筆記之Spark SQL的具體使用
  • pyspark.sql.DataFrame與pandas.DataFrame之間的相互轉換實例
  • 淺談DataFrame和SparkSql取值誤區
  • Spark SQL操作JSON字段的小技巧
  • Spark SQL數據加載和保存實例講解

標簽:泰安 廣東 臺州 汕頭 濟源 武威 濟寧 安徽

巨人網絡通訊聲明:本文標題《Spark SQL的整體實現邏輯解析》,本文關鍵詞  Spark,SQL,的,整體,實現,邏輯,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Spark SQL的整體實現邏輯解析》相關的同類信息!
  • 本頁收集關于Spark SQL的整體實現邏輯解析的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    av一区二区三区黑人| 一级黄色免费毛片| 蜜臀av一区二区三区有限公司| 91久久国产最好的精华液| 国产欧美日韩另类视频免费观看 | 日韩欧美在线123| 亚洲国产aⅴ天堂久久| a4yy欧美一区二区三区| 破处女黄色一级片| 中文字幕第一区二区| 国产福利91精品一区| 国产午夜精品理论片在线| 欧美成人一区二区三区片免费| 精品视频123区在线观看| 亚洲三级久久久| 播五月开心婷婷综合| 男人晚上看的视频| 国产精品色婷婷久久58| 国产+成+人+亚洲欧洲自线| 91麻豆精品久久毛片一级| 久久精品视频网| 国产精品一区二区视频| 自拍偷拍第9页| 国产精品日韩成人| 91精品一区二区三区在线观看| 欧美在线观看视频一区二区 | 日韩一级免费一区| 国产一区不卡精品| 久久国产精品一区二区| 99热在这里有精品免费| 亚洲成人精品在线观看| 中国特级黄色片| 555www色欧美视频| 婷婷国产v国产偷v亚洲高清| 捆绑凌虐一区二区三区| a级在线观看视频| 日韩免费福利电影在线观看| 精品系列免费在线观看| 在线观看天堂av| 亚洲三级免费电影| 美女露出粉嫩尿囗让男人桶| 日韩欧美国产综合| 国产酒店精品激情| 五月婷婷一区二区| 亚洲高清视频的网址| 蜜臀av一区二区三区有限公司| 久久久久久免费网| 成人av电影在线网| 欧美妇女性影城| 久久精品国产免费看久久精品| 中国1级黄色片| 亚洲人成网站精品片在线观看| 国产人妖在线观看| 欧美v亚洲v综合ⅴ国产v| 国产剧情一区在线| 欧美三级日韩三级国产三级| 免费成人小视频| 成人性生活毛片| 亚洲国产精品麻豆| 国产毛片欧美毛片久久久| 国产精品国产三级国产a| 日本天堂在线播放| 久久蜜臀精品av| 97国产精品videossex| 欧美一级日韩免费不卡| 国产乱码字幕精品高清av| 91成人网在线| 卡一卡二国产精品 | 国产三级短视频| 亚洲欧美国产高清| 亚洲熟妇一区二区三区| 中文字幕一区二区三区四区不卡| 亚洲欧美综合视频| 久久久美女毛片| 少妇欧美激情一区二区三区| 久久久久99精品一区| 韩国三级hd中文字幕有哪些| 久久精品免费在线观看| av电影中文字幕| 国产精品久久久久久久久免费桃花| 大桥未久恸哭の女教师| 国产精品美女久久久久久久久久久| 国产高清成人久久| 中文字幕一区二区三区蜜月| 久久久久久久久久久国产精品| 自拍偷拍国产精品| 亚洲国产天堂av| 亚洲国产欧美一区二区三区丁香婷| 蜜桃av免费在线观看| 午夜精品123| 色综合久久久久网| 国内成+人亚洲+欧美+综合在线| 欧美日韩国产大片| 成人国产视频在线观看| 久久久亚洲午夜电影| 国产一卡二卡三卡四卡| 亚洲欧洲中文日韩久久av乱码| 手机看片福利视频| 日韩国产欧美在线播放| 欧美在线观看你懂的| 国产乱码精品一区二区三区五月婷| 欧美一级欧美三级| 日本一区二区三区久久久久久久久不| 日本成人在线免费观看| 国产欧美一区二区精品性色超碰| 99久久国产精| 亚洲成人第一页| 欧美亚洲高清一区二区三区不卡| 国产福利一区在线| 精品成人免费观看| 欧美 日本 国产| 亚洲午夜视频在线| 欧美主播一区二区三区美女| 成人国产精品免费观看动漫| 国产欧美视频一区二区| 性欧美精品男男| 免费精品99久久国产综合精品| 欧美精品免费视频| 免费欧美一级片| 亚洲欧美日韩一区| 中文在线字幕在线观看| 国产高清精品在线| 国产视频一区在线播放| 性爱在线免费视频| 国产在线播精品第三| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 亚洲婷婷综合色高清在线| av天堂一区二区| 一区二区三区久久久| 91久久精品日日躁夜夜躁欧美| caoporm超碰国产精品| 中文字幕欧美一区| 亚洲成人生活片| 国产成人av影院| 中文在线一区二区| 综合五月激情网| av一区二区三区在线| 一区二区三区在线高清| 欧美三级韩国三级日本一级| 熟妇女人妻丰满少妇中文字幕| 亚洲国产一二三| 91精品国产综合久久久久久久久久 | 久久精品国产亚洲a| www.99re6| 国产综合久久久久久鬼色| 久久久www成人免费无遮挡大片| 大胸美女被爆操| 国产成a人亚洲| 亚洲色欲色欲www| 欧美三级资源在线| 亚洲一区二区在线免费| 人人超碰91尤物精品国产| 欧美精品一区二区久久久| 男女男精品视频网站| 成人高清在线视频| 一区二区三区在线免费视频| 欧美人xxxx| 午夜日韩在线电影| 91精品欧美久久久久久动漫 | 亚洲欧洲无码一区二区三区| 91黄色免费版| 国产伦精品一区三区精东| 麻豆一区二区99久久久久| 久久先锋影音av鲁色资源网| 欧美激情精品久久久久久免费 | 亚洲人成影院在线观看| 欧美日韩亚洲综合一区| 特大黑人巨人吊xxxx| 国产一区二区导航在线播放| 亚洲欧美日韩久久精品| 制服丝袜一区二区三区| 国产精品无码无卡无需播放器| 不卡的av在线播放| 天天色 色综合| 国产日产亚洲精品系列| 91精品国产高清一区二区三蜜臀| 中文字幕制服丝袜| 精品一区精品二区高清| 亚洲视频在线一区| 日韩女优视频免费观看| 神马久久精品综合| 国产成人精品一区二区三区在线观看| 琪琪一区二区三区| 欧洲亚洲国产日韩| 久久综合综合久久综合| 国产亚洲精品7777| 在线观看日韩电影| www在线观看免费视频| 成人免费看片app下载| 日一区二区三区| 国产精品理伦片| 日韩视频免费观看高清在线视频| 国产精品免费在线视频| 午夜免费福利影院| 丰满放荡岳乱妇91ww| 日韩激情一二三区| 最新日韩在线视频| 日韩精品专区在线影院观看 | 亚洲性猛交xxxx乱大交| 99久久精品免费观看|