溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

spark2.0新特性的示例分析

發(fā)布時間:2021-12-16 21:52:10 來源:億速云 閱讀:116 作者:柒染 欄目:云計算

本篇文章為大家展示了spark2.0新特性的示例分析,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

使用:

離線計算:數(shù)據(jù)源大多來自hdfs(hive),所以sql使用的非常多,幾乎每個離線計算作業(yè)都會用到hivecontext或sqlcontext

實時計算:streaming模塊

圖計算在企業(yè)里用的很少,需求少

數(shù)據(jù)挖掘包mllib的使用比圖計算略多,但里面的算法不是很好用,目前需求少

新特性:

1,用sparksession實現(xiàn)hivecontext和sqlcontext統(tǒng)一

2,whole-stage code generation,大幅提高計算性能,因為把物理計劃變成硬編碼,每秒處理的sql中的數(shù)據(jù)量增加十倍,即對物理執(zhí)行的多次調(diào)用轉(zhuǎn)化為代碼for循環(huán),蕾絲hardcode方式,減少執(zhí)行的函數(shù)調(diào)用次數(shù),當(dāng)數(shù)據(jù)記錄多時,這個調(diào)用次數(shù)時很大的。

3,合并dataframe和datasets,1.6的dataset包含了dataframe的功能,這樣兩者存在很大冗余,所以2.0將兩者統(tǒng)一,保留dataset api,把dataframe表示為dataset[Row],即dataset的子集。dataframe是sql查詢結(jié)果rdd的抽象類,相當(dāng)于java里的resultset。

4,結(jié)構(gòu)化流計算,sparkstreaming是把流計算看成一個一個的離線計算來完成流計算,提供一套dstream的流api,相比其他的流計算,sparkstreaming的優(yōu)點是容錯行和吞吐量上有優(yōu)勢,在2.0以前的版本,用戶在使用時,如果有流計算,又有離線計算,就需要兩套api去編寫程序,一套是rddapi,一套是dstream api,而且dstream api在易用性上遠(yuǎn)不如sql或dataframe。為了真正將流計算和離線計算在編程api上統(tǒng)一,同時也讓streaming作業(yè)能夠享受dataframe/dataset上所帶來的優(yōu)勢:性能提升和API易用,于是提出了structed streaming,最后我們只需要基于dataframe/dataset可以開發(fā)離線計算和流計算的程序,很容易使得spark在api跟業(yè)界所說的dataflow來統(tǒng)一離線計算和流計算效果一樣。比如在做batch聚合時我們可以寫成下面代碼:

logs = ctx.read.format("json").open("s3://logs")

logs.groupBy(logs.user_id).agg(sum(logs.time)).write.format("jdbc").save("jdbc:mysql//...")

那么對于流計算時,我們僅僅是調(diào)用了dataframe/dataset的不同函數(shù)代碼,如下:

logs = ctx.read.format("json").stream("s3://logs")

logs.groupBy(logs.user_id).agg(sum(logs.time)).write.format("jdbc").stream("jdbc:mysql//...")

5,sql優(yōu)化,增加了以前很多不支持的sql語句

6,采用vectorized Parquet decoder讀取parquet上數(shù)據(jù),以前是一行一行的讀取,然后處理,現(xiàn)在改為一次讀取4096行記錄,不需要沒處理一行紀(jì)錄去調(diào)用一次parquet獲取記錄的方法,而是改為一批去調(diào)用一次(spark-12854) 。加上parquet本身是列存儲,這個優(yōu)化使得parquet讀取速度提高三倍

采用radix sort提高sort的性能(spark-14724)。在某些情況下排序性能可以提高10~20倍

使用vectorizedhashmap來代替java的hashmap加速groupby的執(zhí)行

將hive中的window函數(shù)用native spark window實現(xiàn),因為native spark window在內(nèi)存管理上有優(yōu)勢

避免復(fù)雜語句中的邏輯相同部分在執(zhí)行時重復(fù)計算

壓縮算法默認(rèn)使用lz4

mllib里的計算用dataframe-based api代替以前的rdd計算邏輯

提供更多的r語言算法

使用scala-2.11編譯運行

在和舊版本的兼容方面,將hive語句解析以及語法移動到core里,在沒有hive原數(shù)據(jù)庫和hive依賴包時,我們可以像以前版本使用標(biāo)準(zhǔn)sql一樣去使用hivesql語句。

上述內(nèi)容就是spark2.0新特性的示例分析,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI