溫馨提示×

溫馨提示×

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

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

Apache Spark2.0的核心結(jié)構(gòu)是什么

發(fā)布時間:2022-01-14 17:04:16 來源:億速云 閱讀:117 作者:iii 欄目:云計算

這篇文章主要介紹“Apache Spark2.0的核心結(jié)構(gòu)是什么”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強(qiáng),希望這篇“Apache Spark2.0的核心結(jié)構(gòu)是什么”文章能幫助大家解決問題。

DataFrames, Datasets 以及 Spark SQL

在步驟3中,你已經(jīng)了解到彈性分布式數(shù)據(jù)集(RDDs)——它們構(gòu)成了Spark的核心數(shù)據(jù)抽象概念,是其他所有更高層次數(shù)據(jù)抽象和API、包括DataFrame和數(shù)據(jù)集的基礎(chǔ)。

在Spark2.0,在RDDs之上的DataFrame和數(shù)據(jù)集形成了核心的高層和結(jié)構(gòu)化的分布式數(shù)據(jù)抽象。DataFrame在Spark里被叫做數(shù)據(jù)列(data column),它們可以執(zhí)行組織數(shù)據(jù)的計劃,以及數(shù)據(jù)處理或者描述運算、發(fā)布查詢。數(shù)據(jù)集更進(jìn)一步,提供了一個嚴(yán)格的編譯時類型的安全保障,所以特定類型的錯誤在編譯時就會被發(fā)現(xiàn),而不是在運行時。

Apache Spark2.0的核心結(jié)構(gòu)是什么

憑借數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類型,Spark可以理解你將如何進(jìn)行描述運算,哪些指定類型的列或者特定名稱的字段將會訪問你的數(shù)據(jù),以及你將使用哪些特定操作的作用域。然后,Spark將會通過Spark 2.0’s Catalyst optimizer優(yōu)化你的代碼,通過Project Tungsten生成高效的字節(jié)代碼。

DataFrame和數(shù)據(jù)集為多種高級編程語言提供了API,讓你的代碼更易讀,以及支持高階函數(shù)比如filter, sum, count, avg, min, max等等。不管你用Spark SQL還是Python、Java、Scala或者R來表達(dá)你的計算指令,底層的代碼生成是完全一致的,因為所有的執(zhí)行的計劃都是通過同一Catalyst優(yōu)化器。

例如,Scala的作用域?qū)S么a或者它SQL里對應(yīng)的相關(guān)查詢會生成完全相同的代碼。比如下方會有一個數(shù)據(jù)集Scala項目叫做Person,以及一個SQL表格“Person”。

// a dataset object Person with field names fname, lname, age, weight
// access using object notation
val seniorDS = peopleDS.filter(p=>p.age > 55)
// a dataframe with structure with named columns fname, lname, age, weight
// access using col name notation
Val seniorDF = peopleDF.where(peopleDF("age") > 55)
// equivalent Spark SQL code
val seniorDF = spark.sql("SELECT age from person where age > 35")

為什么Spark結(jié)構(gòu)化數(shù)據(jù)很重要,為什么DataFrame、數(shù)據(jù)集、Spark SQL提供了一個高效的Spark編碼方式,如果你希望了解這些,可以通過鏈接(https://youtu.be/1a4pgYzeFwE )的視頻尋找答案。

##五、GraphFrame的圖形處理

盡管Spark有一個通用的基于RDD的圖形處理庫GraphX,可以優(yōu)化分布式計算以及支持圖形算法,它仍有一些挑戰(zhàn)——沒有Java和Python API,基于低層的RDD API。由于這些問題,它不能通過Project Tungsten 和Catalyst Optimizer享受到最近引入的性能優(yōu)化。

相比之下,基于DataFrame的圖處理庫GraphFrames解決了所有問題:它提供了一個類似于GraphX的庫但是有著更高的層級,更易讀和可讀的API,支持Java, Scala 和Python;可以保存和下載圖形;利用了Spark2.0的底層性能和查詢的優(yōu)化。此外,它集成了GraphX。這意味著你可以無縫地將圖處理庫GraphFrames轉(zhuǎn)換成等效的GraphX表示。

在下圖中,這些城市有各個機(jī)場代號,所有頂點可以表示成DataFrame的排;同樣地,所有邊也可以看做DataFrame的排,它們有著各自的名字和類型的列??偟膩碚f,這些DataFrame的頂點和邊構(gòu)成了一個圖處理庫GraphFrames。

Apache Spark2.0的核心結(jié)構(gòu)是什么

// create a Vertices DataFrame
val vertices = spark.createDataFrame(List(("JFK", "New York", "NY"))).toDF("id", "city", "state")
// create a Edges DataFrame
val edges = spark.createDataFrame(List(("JFK", "SEA", 45, 1058923))).toDF("src", "dst", "delay", "tripID")
// create a GraphFrame and use its APIs
val airportGF = GraphFrame(vertices, edges)
// filter all vertices from the GraphFrame with delays greater an 30 mins
val delayDF = airportGF.edges.filter("delay > 30")
// Using PageRank algorithm, determine the Airport ranking of importance
val pageRanksGF = airportGF.pageRank.resetProbability(0.15).maxIter(5).run()
display(pageRanksGF.vertices.orderBy(desc("pagerank")))

使用GraphFrame可以表達(dá)三種強(qiáng)大的查詢。首先是簡單的SQL類型的關(guān)于點和邊的查詢,比如怎么樣的路線可能會導(dǎo)致重大延遲。第二,圖形類型查詢,比如有多少頂點傳入有多少邊傳出。第三,主題查詢,通過提供一個結(jié)構(gòu)化的模型或者路徑的頂點和邊,找到在圖形中的數(shù)據(jù)集的模型。

此外,圖處理庫GraphFrames可以很輕松地支持GraphX所有圖形算法。例如,使用PageRank找到所有重要的點,或者決定從起點到目的地的最短路徑,或者執(zhí)行一個廣度優(yōu)先搜索(BFS),或者為探索聯(lián)絡(luò)關(guān)系確定強(qiáng)聯(lián)系的點。

在網(wǎng)絡(luò)研討會中(http://go.databricks.com/graphframes-dataframe-based-graphs-for-apache-spark )中,Spark的社區(qū)貢獻(xiàn)者Joseph Bradley給大家介紹了使用圖處理庫GraphFrames進(jìn)行圖像處理的動機(jī)和易用性,以及基于DataFrame的API的好處。作為研討會的一部分,你也將了解到使用圖處理庫GraphFrames的便捷,以及上述所有類型的查詢和算法。

Apache Spark 2.0和許多Spark的組件,包括機(jī)器學(xué)習(xí)MLlib和Streaming,因為性能提升、易用性和高層次的抽象及結(jié)構(gòu),越來越傾向于提供等效的DataFrame API。在必要或者適合的用例中,你可以選擇使用圖處理庫GraphFrames來代替GraphX。下圖是一個GraphX和圖處理庫GraphFrames之間簡潔的總結(jié)和比較。

Apache Spark2.0的核心結(jié)構(gòu)是什么

圖處理庫GraphFrames必會發(fā)展得越來越快。新版本的GraphFrame將作為Spark的一個包和Spark2.0兼容。

關(guān)于“Apache Spark2.0的核心結(jié)構(gòu)是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

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

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

AI