PySpark大數(shù)據(jù)技術(shù)與應(yīng)用 課件 3.1 Spark SQL概述_第1頁
PySpark大數(shù)據(jù)技術(shù)與應(yīng)用 課件 3.1 Spark SQL概述_第2頁
PySpark大數(shù)據(jù)技術(shù)與應(yīng)用 課件 3.1 Spark SQL概述_第3頁
PySpark大數(shù)據(jù)技術(shù)與應(yīng)用 課件 3.1 Spark SQL概述_第4頁
PySpark大數(shù)據(jù)技術(shù)與應(yīng)用 課件 3.1 Spark SQL概述_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

SparkSQL概述1SparkSQL主要功能目錄SparkSQL起源與發(fā)展歷程2SparkSQL數(shù)據(jù)核心抽象DataFrame3SparkSQL是Spark用于處理結(jié)構(gòu)化數(shù)據(jù)的一個(gè)組件,其編程抽象為DataFrame。作為分布式SQL查詢引擎,SparkSQL允許用戶通過SQL、DataFrameAPI和DataSetAPI這3種方式處理結(jié)構(gòu)化數(shù)據(jù)。SparkSQL將關(guān)系處理與Spark函數(shù)編程相結(jié)合,并支持讀取多種數(shù)據(jù)源的數(shù)據(jù),如CSV、JSON、JDBC、Hive等。Spark

SQL概述SparkSQL的起源與發(fā)展緊密相連于大數(shù)據(jù)處理技術(shù)的進(jìn)步和需求,其前身是Shark,后來為了支持更廣泛的數(shù)據(jù)源和優(yōu)化性能,發(fā)展為全新的SparkSQL項(xiàng)目。SparkSQL的起源可以追溯到Hive。Hive作為Hadoop生態(tài)系統(tǒng)中的組件,主要服務(wù)于熟悉SQL但不熟悉MapReduce編程模型的用戶,它允許數(shù)據(jù)分析師使用SQL語句來操作HDFS上的數(shù)據(jù)。然而,Hive在執(zhí)行過程中存在大量的中間磁盤落地過程,導(dǎo)致效率低下。為了提高SQL-on-Hadoop的效率,Shark作為響應(yīng)此需求的解決方案之一被提出。Shark修改了Hive架構(gòu)中的內(nèi)存管理、物理計(jì)劃、執(zhí)行模塊,并運(yùn)行在Spark引擎上,使得SQL查詢速度得到顯著提升。Spark

SQL的起源與發(fā)展隨著技術(shù)的發(fā)展,Shark對(duì)Hive的過度依賴成為了限制Spark發(fā)展的瓶頸。因此,Spark團(tuán)隊(duì)決定拋棄Shark的代碼,轉(zhuǎn)而開發(fā)全新的SparkSQL項(xiàng)目。SparkSQL不僅擺脫了對(duì)Hive的依賴,還支持多種數(shù)據(jù)源,如Hive、Parquet、JSON、JDBC等,同時(shí)采用了多種性能優(yōu)化技術(shù),比如內(nèi)存列存儲(chǔ)、字節(jié)碼生成和動(dòng)態(tài)評(píng)估的成本模型等。從歷史的角度來看,SparkSQL的出現(xiàn)和發(fā)展體現(xiàn)了開源社區(qū)對(duì)于技術(shù)迭代的能力,即不斷推陳出新,以適應(yīng)不斷變化的數(shù)據(jù)處理需求。如今,SparkSQL已經(jīng)成為ApacheSpark生態(tài)中最為活躍的子項(xiàng)目之一,它的重要性伴隨著ApacheSpark的發(fā)展而日益突顯。Spark

SQL的起源與發(fā)展1SparkSQL主要功能目錄SparkSQL起源與發(fā)展歷程2SparkSQL數(shù)據(jù)核心抽象DataFrame3SparkSQL允許開發(fā)人員通過SQL語句簡單快捷地操作海量結(jié)構(gòu)化數(shù)據(jù),進(jìn)行大數(shù)據(jù)分析。多數(shù)據(jù)源支持:從各種結(jié)構(gòu)化文件和數(shù)據(jù)庫中讀取數(shù)據(jù)進(jìn)行高效分析。廣泛的連接性:提供JDBC和ODBC接口,不局限于Spark程序內(nèi)查詢。緊密集成的分析能力:將SQL查詢與RDD結(jié)合,提供跨語言API支持復(fù)雜分析。模塊化協(xié)作:與Streaming、MLlib、GraphX等模塊緊密結(jié)合處理結(jié)構(gòu)化數(shù)據(jù)。SparkSQL主要功能1SparkSQL主要功能目錄SparkSQL起源與發(fā)展歷程2SparkSQL數(shù)據(jù)核心抽象DataFrame3DataFrame:

SparkSQL的核心數(shù)據(jù)抽象,結(jié)合了RDD的彈性與SQL的操作便捷性定義與結(jié)構(gòu):帶模式的RDD(SchemaRDD),提供名稱和類型信息創(chuàng)建方式:支持從結(jié)構(gòu)化文件、數(shù)據(jù)庫、Hive表等多源創(chuàng)建API支持:Scala、Java、Python、R語言的API兼容性高級(jí)特性:自Spark1.6起,DataSetAPI為DataFrame帶來類型安全擴(kuò)展SparkSQL數(shù)據(jù)核心抽象DataFrame1.DataFrame概念NameAgeHeightStringIntDoubleStringIntDoubleStringIntDoubleDataFrame和RDD的共同特征不可變性:一旦創(chuàng)建,DataFrame和RDD中的數(shù)據(jù)不能被修改。如進(jìn)行任何變更,會(huì)生成一個(gè)新的數(shù)據(jù)集。內(nèi)存運(yùn)行:在內(nèi)存中執(zhí)行計(jì)算,這樣可以顯著提高處理速度。彈性分布式計(jì)算能力:利用Spark的彈性分布式數(shù)據(jù)集的特性來處理大規(guī)模數(shù)據(jù)。SparkSQL數(shù)據(jù)核心抽象DataFrame2.

DataFrame與RDD比較DataFrame與RDD的主要區(qū)別數(shù)據(jù)結(jié)構(gòu):DataFrame提供了一種高層次的抽象,類似于傳統(tǒng)數(shù)據(jù)庫中的二維表格,具有行和列。而RDD是一個(gè)分布式的彈性數(shù)據(jù)集,可以看做是一個(gè)不可變的分布式對(duì)象集合。數(shù)據(jù)處理:DataFrame專注于結(jié)構(gòu)化數(shù)據(jù),RDD適用于各類數(shù)據(jù)源,尤其是非結(jié)構(gòu)化數(shù)據(jù)。性能優(yōu)化:DataFrame可以利用其結(jié)構(gòu)化特性進(jìn)行性能優(yōu)化,比如執(zhí)行代碼生成和列式存儲(chǔ)等,這些在RDD中不常見。API支持:DataFrame提供了更豐富的SQL類操作接口,而RDD的API更偏向于低層次的操作。SparkSQL數(shù)據(jù)核心抽象DataFrameDataFrame與RDD雖然都是Spark中重要的數(shù)據(jù)結(jié)構(gòu),但DataFrame通過提供結(jié)構(gòu)化視圖,使得數(shù)據(jù)處理更加直觀和高效,而RDD則在處理非結(jié)構(gòu)化數(shù)據(jù)時(shí)展現(xiàn)出更大的靈活性。SparkSQL數(shù)據(jù)核心抽象DataFrameDataFrame和DataSet都是SparkSQL中的重要數(shù)據(jù)結(jié)構(gòu),它們?cè)陬愋拖到y(tǒng)、API支持和功能定位上存在一些差異。類型系統(tǒng):DataFrame是DataSet[Row]的特例,它的每一行數(shù)據(jù)類型固定為Row。DataFrame通常只知道列字段,而不明確每一列的數(shù)據(jù)類型,在編譯時(shí)不做類型檢查。而DataSet是一個(gè)強(qiáng)類型的數(shù)據(jù)結(jié)構(gòu),用戶需要定義具體的類(如Car類、Person類),DataSet知道每一列的名稱和數(shù)據(jù)類型,提供了更嚴(yán)格的錯(cuò)誤檢查機(jī)制。SparkSQL數(shù)據(jù)核心抽象DataFrame3.

DataFrame與DataSet的比較API支持:DataFrame提供了豐富的SQL類操作接口,可以方便地進(jìn)行數(shù)據(jù)選擇、過濾、聚合等操作。DataSet則提供了更為豐富的API,包括了DataFrame的API以及更多針對(duì)特定類型的操作,這使得DataSet能夠提供更高層次的抽象和更強(qiáng)的類型安全性。功能定位:DataFrame主要用于結(jié)構(gòu)化數(shù)據(jù)處理,它可以看作是傳統(tǒng)數(shù)據(jù)庫中二維表格的一種分布式實(shí)現(xiàn)。而DataSet則結(jié)合了RDD和DataFrame的優(yōu)點(diǎn),不僅提供了結(jié)構(gòu)化數(shù)據(jù)的處理能力,還允許用戶自定義數(shù)據(jù)類型,從而可以進(jìn)行更加復(fù)雜的數(shù)據(jù)處理和分析??偨Y(jié)來說,DataFrame和DataSet雖然在SparkSQL中都扮演著重要的角色,但DataFrame更適合那些不需要明確類型信息的通用數(shù)據(jù)處理任務(wù),而DataSet則適用于需要強(qiáng)類型和復(fù)雜業(yè)務(wù)邏輯處理的場景。SparkSQL數(shù)據(jù)核心抽象DataFrameDataFrame為開發(fā)人員提供了更高級(jí)別的數(shù)據(jù)抽象,使得處理大型數(shù)據(jù)集更加容易。DataFrame優(yōu)點(diǎn)主要體現(xiàn)在以下兩個(gè)方面。性能優(yōu)勢:由于DataFrame引入了Schema,即數(shù)據(jù)結(jié)構(gòu)的描述信息,因此后期Spark程序中的大量對(duì)象在進(jìn)行網(wǎng)絡(luò)傳輸時(shí),只需針對(duì)數(shù)據(jù)的內(nèi)容進(jìn)行序列化,而無需傳輸數(shù)據(jù)結(jié)構(gòu)信息。這樣可以減少數(shù)據(jù)傳輸量,降低序列化和反序列的性能開銷,彌補(bǔ)了RDD在這方面的不足。減少內(nèi)存垃圾回收:DataFrame利用了堆外內(nèi)存(Off-heap),直接在操作系統(tǒng)層上構(gòu)建對(duì)象,而不是使用堆中的內(nèi)存。這樣可以節(jié)省堆內(nèi)存空間,減少垃圾回收(GarbageCollection,GC)的頻率,提高程序運(yùn)行效率,彌補(bǔ)了RDD在堆內(nèi)存占用和垃圾回收方面的不足。

SparkSQL數(shù)據(jù)核心抽象DataFrame4.

DataFrame的優(yōu)點(diǎn)DataFrame在編譯時(shí)不會(huì)進(jìn)行類型檢查,因而無法在編譯時(shí)發(fā)現(xiàn)錯(cuò)誤

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論