




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Spark應(yīng)用開發(fā)技術(shù)本章主要講述SparkGraphX:圖計(jì)算框架。通過學(xué)習(xí)本節(jié)將能夠?qū)W習(xí)SparkGraphX:圖計(jì)算框架。通過本節(jié)學(xué)習(xí)可以:理解圖與圖計(jì)算的基本概念掌握GraphX圖的創(chuàng)建方法掌握GraphX的基本操作掌握以GraphX進(jìn)行關(guān)聯(lián)聚合操作認(rèn)識SparkGraphX圖的基本概念、圖計(jì)算的應(yīng)用、GraphX的基礎(chǔ)概念、GraphX的發(fā)展了解GraphX常用API圖的創(chuàng)建與存儲、數(shù)據(jù)查詢與數(shù)據(jù)轉(zhuǎn)換、結(jié)構(gòu)轉(zhuǎn)換與關(guān)聯(lián)聚合構(gòu)建信任網(wǎng)絡(luò)并找出目標(biāo)用戶構(gòu)建網(wǎng)站信任網(wǎng)絡(luò)、找出需要支付稿酬的用戶、找出進(jìn)入熱門榜的用戶1.圖創(chuàng)建與存儲Edge:邊對象,存有srcId,dstId,attr三個字段,以及一些操作Edge的方法,例:Edge(srcId,dstId,attr)RDD[Edge]:存放著Edge對象的RDDEdgeRDD:完整提供邊的各種操作類RDD[(VertexId,VD)]:存放頂點(diǎn)的RDD,頂點(diǎn)有VertexId和VD兩個字段,第一個是頂點(diǎn)Id,第二個是頂點(diǎn)屬性。定義一個頂點(diǎn)例如:(VertexId,VD)VertexRDD:提供頂點(diǎn)的各種操作方法的對象了解GraphX常用API1.圖創(chuàng)建與存儲
圖的創(chuàng)建是進(jìn)行圖計(jì)算的重要步驟,在SparkGraphX中創(chuàng)建圖的方式很多,根據(jù)不同的數(shù)據(jù)集有不同的方法。GraphX有一個類Graph,Graph對象是用戶的操作入口,主要包含邊屬性edge(邊)、頂點(diǎn)屬性vertex(頂點(diǎn))、圖的創(chuàng)建方法、查詢方法和其他轉(zhuǎn)換方法等。其中Graph類中圖的創(chuàng)建方法主要有3種,適用于不同類型的輸入數(shù)據(jù)。了解GraphX常用API1.圖創(chuàng)建與存儲了解GraphX常用API用戶信息vertices.txt,有3個字段,分別為用戶Id,姓名和職業(yè)另一份數(shù)據(jù)“edges.txt”是用戶之間的關(guān)系數(shù)據(jù),有3個字段,第1、2個是用戶Id,第3個是第1個用戶對于第2個用戶的關(guān)系,如“37Collaborator”表示3是7的合作伙伴。根據(jù)頂點(diǎn)數(shù)據(jù)和邊數(shù)據(jù),可以構(gòu)建如圖所示的用戶關(guān)系網(wǎng)絡(luò)圖,頂點(diǎn)包含用戶Id和用戶屬性,邊有起點(diǎn)和目標(biāo)點(diǎn),并且有邊屬性和指向。1.圖的創(chuàng)建與存儲在使用SparkGraphX進(jìn)行操作時,需要先將指定的包導(dǎo)入了解GraphX常用API1.圖的創(chuàng)建與存儲方式一根據(jù)有屬性的頂點(diǎn)和邊構(gòu)建圖(Graph(vertices,edges,defaultVertexAttr))vertices:RDD[(VertexId,VD)]:“頂點(diǎn)”類型的RDD,其中VertexId為頂點(diǎn)ID(必須為Long類型),VD為頂點(diǎn)屬性信息。edges:RDD[Edge[ED]]:“邊”類型的RDD,Edge類包含srcId(起點(diǎn),Long類型)、dstId(目標(biāo)點(diǎn),Long類型),attr(邊屬性)三個部分。defaultVertexAttr:一個固定的頂點(diǎn)信息,用于當(dāng)數(shù)據(jù)中出現(xiàn)頂點(diǎn)缺失時使用。了解GraphX常用API1.圖的創(chuàng)建與存儲方式一“頂點(diǎn)”和“邊”的RDD來自不同的數(shù)據(jù)源,與Spark中其他RDD的建立并沒有區(qū)別,但是頂點(diǎn)Id要求是Long類型了解GraphX常用API1.圖的創(chuàng)建與存儲方式一查詢創(chuàng)建完成的圖graph_urelate可以用graph_urelate.vertices查看頂點(diǎn)信息,用graph_urelate.edges查看邊信息了解GraphX常用API1.圖的創(chuàng)建與存儲方式二根據(jù)邊創(chuàng)建圖(Graph.fromEdges(RDD[Edge[ED]],defaultValue))這種方法相對而言最為簡單,只是由Edge類型RDD建立圖,邊的屬性沒有則設(shè)為一個固定值,由“邊”RDD中出現(xiàn)所有頂點(diǎn)(無論是起始點(diǎn)src還是目標(biāo)點(diǎn)dst)自動產(chǎn)生頂點(diǎn)vertextId,頂點(diǎn)的屬性將被設(shè)置為一個默認(rèn)值。fromEdges方法有兩個參數(shù)值如下RDD[Edge[ED]]:“邊”類型的RDD,Edge包含(srcId,dstId,prop)defaultValue:VD:默認(rèn)頂點(diǎn)屬性值。了解GraphX常用API1.圖的創(chuàng)建與存儲方式二Graph.fromEdges創(chuàng)建圖只需要邊的數(shù)據(jù)如下代碼所示,僅根據(jù)“edges.txt”中的邊數(shù)據(jù)創(chuàng)建圖,頂點(diǎn)由邊數(shù)據(jù)中出現(xiàn)的頂點(diǎn)決定。了解GraphX常用API1.圖的創(chuàng)建與存儲方式二對圖的頂點(diǎn)和邊進(jìn)行查詢?nèi)鐖D所示,文件中的邊和邊屬性都加載到圖中,頂點(diǎn)則根據(jù)邊的數(shù)據(jù)提取了起點(diǎn)和目標(biāo)點(diǎn)作為頂點(diǎn),頂點(diǎn)屬性默認(rèn)值1了解GraphX常用API1.圖的創(chuàng)建與存儲方式三根據(jù)邊的兩個頂點(diǎn)的元組創(chuàng)建圖(Graph.fromEdgeTuples())Graph.fromEdgeTuples()通過邊的兩個頂點(diǎn)ID組成的二元組創(chuàng)建圖,將一條邊的起點(diǎn)與目標(biāo)點(diǎn)放在一個二元組中,通過邊的二元組RDD創(chuàng)建圖。rawEdges:RDD[(VertexId,VertexId)]:其中的數(shù)據(jù)類型是一個起點(diǎn)與目標(biāo)點(diǎn)的元組defaultValue:VD:默認(rèn)屬性值。uniqueEdges:Option[PartitionStrategy]=None:是否對邊進(jìn)行分區(qū)選項(xiàng),可選可不選,默認(rèn)不分區(qū)了解GraphX常用API1.圖的創(chuàng)建與存儲方式三fromEdgeTuples僅需要邊的起點(diǎn)和目標(biāo)點(diǎn),將數(shù)據(jù)“edges.txt”作為輸入數(shù)據(jù),通過fromEdgeTuples方法構(gòu)造圖了解GraphX常用API1.圖的創(chuàng)建與存儲方式三對圖的邊和頂點(diǎn)進(jìn)行查詢了解GraphX常用API2.圖的緩存圖的緩存和釋放緩存主要方法如表所示了解GraphX常用API2.圖的緩存在Spark中,RDD默認(rèn)沒有持久化在內(nèi)存中。當(dāng)多次使用某個變量時,為了避免重復(fù)計(jì)算,變量必須被明確緩存,GraphX中的圖也是相同的方式。當(dāng)一個圖需要多次計(jì)算使用時,需要對圖進(jìn)行緩存,緩存有cache和persist兩種方法對于persist,如果想指定緩存類型為StorageLevel.MEMORY_ONLY,需要導(dǎo)入org.apache.spark.storage.StorageLevel包了解GraphX常用API2.圖的緩存——釋放緩存對于已經(jīng)完成計(jì)算無需再使用的緩存內(nèi)容可以進(jìn)行釋放,在迭代過程中無需再使用的緩存也可以釋放。釋放緩存方法有如下3種。Graph.unpersist(blocking=true):釋放整個圖緩存Graph.unpersistVertices(blocking=true):釋放內(nèi)存中緩存的vertices。Graph.edges.unpersist(blocking=true):釋放邊緩存,使用對邊進(jìn)行修改,但會重復(fù)使用點(diǎn)進(jìn)行運(yùn)算的操作了解GraphX常用API3.圖數(shù)據(jù)查詢圖創(chuàng)建之后,對所創(chuàng)建的圖進(jìn)行查詢。查詢內(nèi)容包括頂點(diǎn)與邊的個數(shù),頂點(diǎn)與邊的視圖,出度數(shù)(以當(dāng)前頂點(diǎn)為起點(diǎn)的邊的數(shù)量),入度數(shù)(以當(dāng)前頂點(diǎn)為目標(biāo)點(diǎn)的邊的數(shù)量)。基本的方法如所示了解GraphX常用API3.圖數(shù)據(jù)查詢numEdges:查詢圖中邊的數(shù)量numEdge方法可以查詢邊的數(shù)量,不需要輸入任何參數(shù),直接通過Graph.numEdges查詢,返回類型為Long類型numVertices:查詢圖中頂點(diǎn)個數(shù)numVertices方法可以查詢頂點(diǎn)個數(shù),不需要輸入任何參數(shù),直接通過Graph.numVertices查詢,返回類型為Long類型。了解GraphX常用API3.圖數(shù)據(jù)查詢頂點(diǎn)視圖:頂點(diǎn)視圖可以查看頂點(diǎn)的信息,通過graph.vertices可以返回一個VertexRDD[(VD],VD為頂點(diǎn)屬性,它繼承于RDD[(VertexID,VD)],所以可以看到頂點(diǎn)的ID和屬性,也可以用Scala的case表達(dá)式解構(gòu)這個元組直接查看頂點(diǎn)信息:graph.vertices.collect通過模式匹配解構(gòu)元組:根據(jù)返回的頂點(diǎn)字段數(shù),通過模式匹配返回的RDD類型元組了解GraphX常用API3.圖數(shù)據(jù)查詢頂點(diǎn)視圖增加過濾條件的頂點(diǎn)視圖:通過filter方法增加過濾條件查詢感興趣的頂點(diǎn)信息通過下標(biāo)查詢:可以直接根據(jù)Spark元組的特性通過下標(biāo)的方式訪問返回的頂點(diǎn)信息了解GraphX常用API3.圖數(shù)據(jù)查詢邊視圖:邊視圖只會返回邊的信息。graph.edges返回一個包含Edge[ED]對象的EdgeRDD,ED表示邊屬性的類型。Edge有三個字段:起點(diǎn)Id、目標(biāo)點(diǎn)Id、邊屬性。并且可以通過case類的類型構(gòu)造器匹配返回的EdgeRDD直接查看所有邊信息:graph.edges.collect了解GraphX常用API3.圖數(shù)據(jù)查詢邊視圖通過模式匹配解構(gòu)并且添加過濾條件:用模式匹配Edge類型的返回結(jié)果,再利用filter進(jìn)行過濾通過下標(biāo)查詢:通過下標(biāo)查詢時,由于Edge類中有三個屬性srcId,dstId和attr,因此可以直接指定屬性訪問了解GraphX常用API3.圖數(shù)據(jù)查詢頂點(diǎn)與邊的三元組整體視圖:三元視圖邏輯上將頂點(diǎn)和邊的屬性保存為一個RDD[EdgeTriplet[VD,ED]],它包含EdgeTriplet類的實(shí)例。EdgeTriplet類繼承于Edge類,所以可以直接訪問Edge類的三個屬性,并且加入了srcAttr和dstAttr成員,這兩個成員分別包含起點(diǎn)和目標(biāo)點(diǎn)的屬性。graph.triplets可以查看到邊和頂點(diǎn)的所有信息,是一個完整的視圖直接查詢:graph.triplets.collect,查詢用戶關(guān)系網(wǎng)絡(luò)圖,返回結(jié)果包含頂點(diǎn)和邊的所有信息,包括邊的起點(diǎn)和目標(biāo)點(diǎn),起點(diǎn)屬性,目標(biāo)點(diǎn)屬性,邊屬性。了解GraphX常用API3.圖數(shù)據(jù)查詢頂點(diǎn)與邊的三元組整體視圖通過下標(biāo)查詢:通過新成員變量srcAttr,dstAttr可以訪問起點(diǎn)屬性和目標(biāo)點(diǎn)屬性,可以用邊的字段訪問邊的屬性了解GraphX常用API3.圖數(shù)據(jù)查詢度分布計(jì)算:度分布檢測的目的,主要是了解圖中“超級節(jié)點(diǎn)”的個數(shù)和規(guī)模,以及所有節(jié)點(diǎn)度的分布曲線。超級節(jié)點(diǎn)的存在對各種傳播算法都會有重大的影響(不論是正面助力還是反面阻力),因此要預(yù)先對這些數(shù)據(jù)量有個預(yù)估。借助GraphX最基本的圖信息接口degrees:VertexRDD[Int](包括inDegrees和outDegrees),這個指標(biāo)可以輕松計(jì)算出來,并進(jìn)行各種各樣的統(tǒng)計(jì)degrees:返回每個頂點(diǎn)的度inDegrees:計(jì)算每個頂點(diǎn)的入度數(shù),不需要參數(shù)outDegrees:計(jì)算頂點(diǎn)的出度,不需要參數(shù)了解GraphX常用API3.圖數(shù)據(jù)查詢了解GraphX常用API自定義函數(shù)&內(nèi)置函數(shù):用戶如果想要對圖的度進(jìn)行一些特別的計(jì)算,比如最大最小值,平均值一類的計(jì)算,可以通過自定義函數(shù)的方式,也可以通過RDD所內(nèi)置的函數(shù)完成。利用自定義函數(shù)統(tǒng)計(jì)度的最大值,如右上圖所示使用RDD自帶的統(tǒng)計(jì)函數(shù)進(jìn)行度分布分析,使用RDD內(nèi)置min,max,sortByKey,top等等對度進(jìn)行統(tǒng)計(jì),graph.degrees返回的是VertexRDD[Int],即(VertexID,Int),需要調(diào)換成RDD[(Int,VetexId)],因?yàn)檫@些函數(shù)都是對第一個值也就是key操作的4.圖數(shù)據(jù)轉(zhuǎn)換通過以下的數(shù)據(jù)操作轉(zhuǎn)換命令轉(zhuǎn)換數(shù)據(jù)的一個重要特征是它允許所得圖形重用原有圖形的結(jié)構(gòu)索引(indices),SparkGraphX常見的數(shù)據(jù)轉(zhuǎn)換方法主要如表所示了解GraphX常用API4.圖數(shù)據(jù)轉(zhuǎn)換mapVertices:通過graph.mapVertices直接對頂點(diǎn)進(jìn)行map,返回按用戶提供函數(shù)改變了圖中頂點(diǎn)屬性的值或類型之后的圖。該方法主要需要一個函數(shù),調(diào)用Spark中的map操作,更新頂點(diǎn)的屬性值,由VD-->newVD。了解GraphX常用API4.圖數(shù)據(jù)轉(zhuǎn)換mapEdges:通過graph.mapEdges直接對邊的屬性進(jìn)行操作,調(diào)用Spark中的map操作更新邊的屬性值,由ED-->newED,返回按用戶提供函數(shù)改變圖中邊屬性的值或類型之后的圖mapTriplets:該方法的操作也是針對邊的屬性值,通過調(diào)用Spark中的map操作更新邊的屬性值,由ED-->newED。例如將邊的屬性用起點(diǎn)的屬性的第一個值姓名替換了解GraphX常用API5.結(jié)構(gòu)轉(zhuǎn)換結(jié)構(gòu)轉(zhuǎn)換是對整個圖的結(jié)構(gòu)進(jìn)行操作,生成新的圖。SparkGraphX中圖的結(jié)構(gòu)轉(zhuǎn)化操作方法也是存放在類Graph中,主要方法如表所示了解GraphX常用API5.結(jié)構(gòu)轉(zhuǎn)換通過user.txt和relate.txt創(chuàng)建用戶社交網(wǎng)絡(luò)圖reverse:返回一個新的圖,這個圖的邊的方向與原圖相比都是反轉(zhuǎn)的。沒有修改頂點(diǎn)或者邊的屬性或者改變邊的數(shù)量,不需要輸入其他參數(shù)了解GraphX常用API5.結(jié)構(gòu)轉(zhuǎn)換對社交網(wǎng)絡(luò)圖graph進(jìn)行結(jié)構(gòu)轉(zhuǎn)換subgraph:創(chuàng)建子圖的方法。子圖是指節(jié)點(diǎn)集和邊集分別是某一圖的節(jié)點(diǎn)集的子集和邊集的子集的圖在graph.subgraph方法中需要輸入邊的過濾條件或頂點(diǎn)的過濾條件,頂點(diǎn)操作可以通過字段vpred匹配頂點(diǎn)屬性個數(shù)。對于邊屬性,可以通過epred字段匹配,其中的屬性可以通過默認(rèn)屬性名獲取了解GraphX常用API5.結(jié)構(gòu)轉(zhuǎn)換對社交網(wǎng)絡(luò)圖graph進(jìn)行結(jié)構(gòu)轉(zhuǎn)換mask:合并兩個圖并且只保留兩個圖中都有的頂點(diǎn)和邊,在使用時需要輸入另一個圖作為參數(shù)。groupEdges:用來合并相同Id的邊了解GraphX常用API6.關(guān)聯(lián)聚合關(guān)聯(lián)轉(zhuǎn)換與聚合操作是圖計(jì)算的一個重點(diǎn),通過關(guān)聯(lián)操作可以將頂點(diǎn)屬性值連接到圖中。而聚合操作可以發(fā)送信息給指定頂點(diǎn)并將數(shù)據(jù)聚集起來,達(dá)到指定的目的。關(guān)聯(lián)聚合的方法如表所示了解GraphX常用API6.關(guān)聯(lián)聚合了解GraphX常用APIcollectNeighbors:該方法的作用是收集每個頂點(diǎn)的鄰居頂點(diǎn)的頂點(diǎn)Id和頂點(diǎn)屬性,鄰居頂點(diǎn)為與該點(diǎn)直接相連的頂點(diǎn)。該方法需要輸入一個參數(shù),返回的結(jié)果是頂點(diǎn)Id和頂點(diǎn)屬性的元組。參數(shù)只有以下幾種類型。EdgeDirection.Out:表示只收集以該頂點(diǎn)為起點(diǎn),鄰居頂點(diǎn)為目標(biāo)點(diǎn)的鄰居頂點(diǎn)的頂點(diǎn)Id和頂點(diǎn)信息EdgeDirection.In:表示只收集以鄰居頂點(diǎn)作為起點(diǎn),該點(diǎn)作為目標(biāo)點(diǎn)的鄰居頂點(diǎn)的頂點(diǎn)Id和頂點(diǎn)信息EdgeDirection.Either:收集所有鄰居頂點(diǎn)的頂點(diǎn)Id和頂點(diǎn)信息6.關(guān)聯(lián)聚合collectNeighborIds:該方法與collectNeighbors方法一致,只是該方法只返回頂點(diǎn)Id,不返回頂點(diǎn)信息了解GraphX常用API6.關(guān)聯(lián)聚合aggregateMessages:GraphX中的核心聚合操作是aggregateMessages,它主要功能是向鄰邊發(fā)消息,合并鄰邊收到的消息,aggregateMessages方法定義如下defaggregateMessages[Msg:ClassTag](sendMsg:EdgeContext[VD,ED,Msg]=>Unit,mergeMsg:(Msg,Msg)=>Msg,tripletFields:TripletFi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 仿古建筑合同范本
- 兼職打工戀愛合同范本
- 公路墊資合同范本
- 人參人員訂購合同范本
- 財(cái)務(wù)新員工入職心得體會13篇
- 產(chǎn)品app開發(fā)合同范本
- 企業(yè)銀行抵押合同范本
- 交換房屋合同范本
- 臨星合同范本
- 人事外包服務(wù)合同范本
- 裝飾材料復(fù)試清單
- 有限公司事業(yè)合伙人管理辦法
- 工余安健環(huán)管理制度
- 某學(xué)校食堂服務(wù)投標(biāo)書
- 空調(diào)維保服務(wù)項(xiàng)目質(zhì)量保障措施
- 《馬克思主義與社會科學(xué)方法論》課后思考題答案全
- 急性心肌梗塞
- 八年級地理下期教學(xué)計(jì)劃(星球地圖版)
- 休閑農(nóng)業(yè)與鄉(xiāng)村旅游(課件)
- 藍(lán)色科技風(fēng)半導(dǎo)體產(chǎn)業(yè)PPT模板
- 院感手衛(wèi)生培訓(xùn)課件
評論
0/150
提交評論