《Spark應用開發(fā)技術》課件-02-了解GraphX常用API_第1頁
《Spark應用開發(fā)技術》課件-02-了解GraphX常用API_第2頁
《Spark應用開發(fā)技術》課件-02-了解GraphX常用API_第3頁
《Spark應用開發(fā)技術》課件-02-了解GraphX常用API_第4頁
《Spark應用開發(fā)技術》課件-02-了解GraphX常用API_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

Spark應用開發(fā)技術本章主要講述SparkGraphX:圖計算框架。通過學習本節(jié)將能夠學習SparkGraphX:圖計算框架。通過本節(jié)學習可以:理解圖與圖計算的基本概念掌握GraphX圖的創(chuàng)建方法掌握GraphX的基本操作掌握以GraphX進行關聯(lián)聚合操作認識SparkGraphX圖的基本概念、圖計算的應用、GraphX的基礎概念、GraphX的發(fā)展了解GraphX常用API圖的創(chuàng)建與存儲、數(shù)據(jù)查詢與數(shù)據(jù)轉換、結構轉換與關聯(lián)聚合構建信任網(wǎng)絡并找出目標用戶構建網(wǎng)站信任網(wǎng)絡、找出需要支付稿酬的用戶、找出進入熱門榜的用戶1.圖創(chuàng)建與存儲Edge:邊對象,存有srcId,dstId,attr三個字段,以及一些操作Edge的方法,例:Edge(srcId,dstId,attr)RDD[Edge]:存放著Edge對象的RDDEdgeRDD:完整提供邊的各種操作類RDD[(VertexId,VD)]:存放頂點的RDD,頂點有VertexId和VD兩個字段,第一個是頂點Id,第二個是頂點屬性。定義一個頂點例如:(VertexId,VD)VertexRDD:提供頂點的各種操作方法的對象了解GraphX常用API1.圖創(chuàng)建與存儲

圖的創(chuàng)建是進行圖計算的重要步驟,在SparkGraphX中創(chuàng)建圖的方式很多,根據(jù)不同的數(shù)據(jù)集有不同的方法。GraphX有一個類Graph,Graph對象是用戶的操作入口,主要包含邊屬性edge(邊)、頂點屬性vertex(頂點)、圖的創(chuàng)建方法、查詢方法和其他轉換方法等。其中Graph類中圖的創(chuàng)建方法主要有3種,適用于不同類型的輸入數(shù)據(jù)。了解GraphX常用API1.圖創(chuàng)建與存儲了解GraphX常用API用戶信息vertices.txt,有3個字段,分別為用戶Id,姓名和職業(yè)另一份數(shù)據(jù)“edges.txt”是用戶之間的關系數(shù)據(jù),有3個字段,第1、2個是用戶Id,第3個是第1個用戶對于第2個用戶的關系,如“37Collaborator”表示3是7的合作伙伴。根據(jù)頂點數(shù)據(jù)和邊數(shù)據(jù),可以構建如圖所示的用戶關系網(wǎng)絡圖,頂點包含用戶Id和用戶屬性,邊有起點和目標點,并且有邊屬性和指向。1.圖的創(chuàng)建與存儲在使用SparkGraphX進行操作時,需要先將指定的包導入了解GraphX常用API1.圖的創(chuàng)建與存儲方式一根據(jù)有屬性的頂點和邊構建圖(Graph(vertices,edges,defaultVertexAttr))vertices:RDD[(VertexId,VD)]:“頂點”類型的RDD,其中VertexId為頂點ID(必須為Long類型),VD為頂點屬性信息。edges:RDD[Edge[ED]]:“邊”類型的RDD,Edge類包含srcId(起點,Long類型)、dstId(目標點,Long類型),attr(邊屬性)三個部分。defaultVertexAttr:一個固定的頂點信息,用于當數(shù)據(jù)中出現(xiàn)頂點缺失時使用。了解GraphX常用API1.圖的創(chuàng)建與存儲方式一“頂點”和“邊”的RDD來自不同的數(shù)據(jù)源,與Spark中其他RDD的建立并沒有區(qū)別,但是頂點Id要求是Long類型了解GraphX常用API1.圖的創(chuàng)建與存儲方式一查詢創(chuàng)建完成的圖graph_urelate可以用graph_urelate.vertices查看頂點信息,用graph_urelate.edges查看邊信息了解GraphX常用API1.圖的創(chuàng)建與存儲方式二根據(jù)邊創(chuàng)建圖(Graph.fromEdges(RDD[Edge[ED]],defaultValue))這種方法相對而言最為簡單,只是由Edge類型RDD建立圖,邊的屬性沒有則設為一個固定值,由“邊”RDD中出現(xiàn)所有頂點(無論是起始點src還是目標點dst)自動產(chǎn)生頂點vertextId,頂點的屬性將被設置為一個默認值。fromEdges方法有兩個參數(shù)值如下RDD[Edge[ED]]:“邊”類型的RDD,Edge包含(srcId,dstId,prop)defaultValue:VD:默認頂點屬性值。了解GraphX常用API1.圖的創(chuàng)建與存儲方式二Graph.fromEdges創(chuàng)建圖只需要邊的數(shù)據(jù)如下代碼所示,僅根據(jù)“edges.txt”中的邊數(shù)據(jù)創(chuàng)建圖,頂點由邊數(shù)據(jù)中出現(xiàn)的頂點決定。了解GraphX常用API1.圖的創(chuàng)建與存儲方式二對圖的頂點和邊進行查詢?nèi)鐖D所示,文件中的邊和邊屬性都加載到圖中,頂點則根據(jù)邊的數(shù)據(jù)提取了起點和目標點作為頂點,頂點屬性默認值1了解GraphX常用API1.圖的創(chuàng)建與存儲方式三根據(jù)邊的兩個頂點的元組創(chuàng)建圖(Graph.fromEdgeTuples())Graph.fromEdgeTuples()通過邊的兩個頂點ID組成的二元組創(chuàng)建圖,將一條邊的起點與目標點放在一個二元組中,通過邊的二元組RDD創(chuàng)建圖。rawEdges:RDD[(VertexId,VertexId)]:其中的數(shù)據(jù)類型是一個起點與目標點的元組defaultValue:VD:默認屬性值。uniqueEdges:Option[PartitionStrategy]=None:是否對邊進行分區(qū)選項,可選可不選,默認不分區(qū)了解GraphX常用API1.圖的創(chuàng)建與存儲方式三fromEdgeTuples僅需要邊的起點和目標點,將數(shù)據(jù)“edges.txt”作為輸入數(shù)據(jù),通過fromEdgeTuples方法構造圖了解GraphX常用API1.圖的創(chuàng)建與存儲方式三對圖的邊和頂點進行查詢了解GraphX常用API2.圖的緩存圖的緩存和釋放緩存主要方法如表所示了解GraphX常用API2.圖的緩存在Spark中,RDD默認沒有持久化在內(nèi)存中。當多次使用某個變量時,為了避免重復計算,變量必須被明確緩存,GraphX中的圖也是相同的方式。當一個圖需要多次計算使用時,需要對圖進行緩存,緩存有cache和persist兩種方法對于persist,如果想指定緩存類型為StorageLevel.MEMORY_ONLY,需要導入org.apache.spark.storage.StorageLevel包了解GraphX常用API2.圖的緩存——釋放緩存對于已經(jīng)完成計算無需再使用的緩存內(nèi)容可以進行釋放,在迭代過程中無需再使用的緩存也可以釋放。釋放緩存方法有如下3種。Graph.unpersist(blocking=true):釋放整個圖緩存Graph.unpersistVertices(blocking=true):釋放內(nèi)存中緩存的vertices。Graph.edges.unpersist(blocking=true):釋放邊緩存,使用對邊進行修改,但會重復使用點進行運算的操作了解GraphX常用API3.圖數(shù)據(jù)查詢圖創(chuàng)建之后,對所創(chuàng)建的圖進行查詢。查詢內(nèi)容包括頂點與邊的個數(shù),頂點與邊的視圖,出度數(shù)(以當前頂點為起點的邊的數(shù)量),入度數(shù)(以當前頂點為目標點的邊的數(shù)量)?;镜姆椒ㄈ缢玖私釭raphX常用API3.圖數(shù)據(jù)查詢numEdges:查詢圖中邊的數(shù)量numEdge方法可以查詢邊的數(shù)量,不需要輸入任何參數(shù),直接通過Graph.numEdges查詢,返回類型為Long類型numVertices:查詢圖中頂點個數(shù)numVertices方法可以查詢頂點個數(shù),不需要輸入任何參數(shù),直接通過Graph.numVertices查詢,返回類型為Long類型。了解GraphX常用API3.圖數(shù)據(jù)查詢頂點視圖:頂點視圖可以查看頂點的信息,通過graph.vertices可以返回一個VertexRDD[(VD],VD為頂點屬性,它繼承于RDD[(VertexID,VD)],所以可以看到頂點的ID和屬性,也可以用Scala的case表達式解構這個元組直接查看頂點信息:graph.vertices.collect通過模式匹配解構元組:根據(jù)返回的頂點字段數(shù),通過模式匹配返回的RDD類型元組了解GraphX常用API3.圖數(shù)據(jù)查詢頂點視圖增加過濾條件的頂點視圖:通過filter方法增加過濾條件查詢感興趣的頂點信息通過下標查詢:可以直接根據(jù)Spark元組的特性通過下標的方式訪問返回的頂點信息了解GraphX常用API3.圖數(shù)據(jù)查詢邊視圖:邊視圖只會返回邊的信息。graph.edges返回一個包含Edge[ED]對象的EdgeRDD,ED表示邊屬性的類型。Edge有三個字段:起點Id、目標點Id、邊屬性。并且可以通過case類的類型構造器匹配返回的EdgeRDD直接查看所有邊信息:graph.edges.collect了解GraphX常用API3.圖數(shù)據(jù)查詢邊視圖通過模式匹配解構并且添加過濾條件:用模式匹配Edge類型的返回結果,再利用filter進行過濾通過下標查詢:通過下標查詢時,由于Edge類中有三個屬性srcId,dstId和attr,因此可以直接指定屬性訪問了解GraphX常用API3.圖數(shù)據(jù)查詢頂點與邊的三元組整體視圖:三元視圖邏輯上將頂點和邊的屬性保存為一個RDD[EdgeTriplet[VD,ED]],它包含EdgeTriplet類的實例。EdgeTriplet類繼承于Edge類,所以可以直接訪問Edge類的三個屬性,并且加入了srcAttr和dstAttr成員,這兩個成員分別包含起點和目標點的屬性。graph.triplets可以查看到邊和頂點的所有信息,是一個完整的視圖直接查詢:graph.triplets.collect,查詢用戶關系網(wǎng)絡圖,返回結果包含頂點和邊的所有信息,包括邊的起點和目標點,起點屬性,目標點屬性,邊屬性。了解GraphX常用API3.圖數(shù)據(jù)查詢頂點與邊的三元組整體視圖通過下標查詢:通過新成員變量srcAttr,dstAttr可以訪問起點屬性和目標點屬性,可以用邊的字段訪問邊的屬性了解GraphX常用API3.圖數(shù)據(jù)查詢度分布計算:度分布檢測的目的,主要是了解圖中“超級節(jié)點”的個數(shù)和規(guī)模,以及所有節(jié)點度的分布曲線。超級節(jié)點的存在對各種傳播算法都會有重大的影響(不論是正面助力還是反面阻力),因此要預先對這些數(shù)據(jù)量有個預估。借助GraphX最基本的圖信息接口degrees:VertexRDD[Int](包括inDegrees和outDegrees),這個指標可以輕松計算出來,并進行各種各樣的統(tǒng)計degrees:返回每個頂點的度inDegrees:計算每個頂點的入度數(shù),不需要參數(shù)outDegrees:計算頂點的出度,不需要參數(shù)了解GraphX常用API3.圖數(shù)據(jù)查詢了解GraphX常用API自定義函數(shù)&內(nèi)置函數(shù):用戶如果想要對圖的度進行一些特別的計算,比如最大最小值,平均值一類的計算,可以通過自定義函數(shù)的方式,也可以通過RDD所內(nèi)置的函數(shù)完成。利用自定義函數(shù)統(tǒng)計度的最大值,如右上圖所示使用RDD自帶的統(tǒng)計函數(shù)進行度分布分析,使用RDD內(nèi)置min,max,sortByKey,top等等對度進行統(tǒng)計,graph.degrees返回的是VertexRDD[Int],即(VertexID,Int),需要調(diào)換成RDD[(Int,VetexId)],因為這些函數(shù)都是對第一個值也就是key操作的4.圖數(shù)據(jù)轉換通過以下的數(shù)據(jù)操作轉換命令轉換數(shù)據(jù)的一個重要特征是它允許所得圖形重用原有圖形的結構索引(indices),SparkGraphX常見的數(shù)據(jù)轉換方法主要如表所示了解GraphX常用API4.圖數(shù)據(jù)轉換mapVertices:通過graph.mapVertices直接對頂點進行map,返回按用戶提供函數(shù)改變了圖中頂點屬性的值或類型之后的圖。該方法主要需要一個函數(shù),調(diào)用Spark中的map操作,更新頂點的屬性值,由VD-->newVD。了解GraphX常用API4.圖數(shù)據(jù)轉換mapEdges:通過graph.mapEdges直接對邊的屬性進行操作,調(diào)用Spark中的map操作更新邊的屬性值,由ED-->newED,返回按用戶提供函數(shù)改變圖中邊屬性的值或類型之后的圖mapTriplets:該方法的操作也是針對邊的屬性值,通過調(diào)用Spark中的map操作更新邊的屬性值,由ED-->newED。例如將邊的屬性用起點的屬性的第一個值姓名替換了解GraphX常用API5.結構轉換結構轉換是對整個圖的結構進行操作,生成新的圖。SparkGraphX中圖的結構轉化操作方法也是存放在類Graph中,主要方法如表所示了解GraphX常用API5.結構轉換通過user.txt和relate.txt創(chuàng)建用戶社交網(wǎng)絡圖reverse:返回一個新的圖,這個圖的邊的方向與原圖相比都是反轉的。沒有修改頂點或者邊的屬性或者改變邊的數(shù)量,不需要輸入其他參數(shù)了解GraphX常用API5.結構轉換對社交網(wǎng)絡圖graph進行結構轉換subgraph:創(chuàng)建子圖的方法。子圖是指節(jié)點集和邊集分別是某一圖的節(jié)點集的子集和邊集的子集的圖在graph.subgraph方法中需要輸入邊的過濾條件或頂點的過濾條件,頂點操作可以通過字段vpred匹配頂點屬性個數(shù)。對于邊屬性,可以通過epred字段匹配,其中的屬性可以通過默認屬性名獲取了解GraphX常用API5.結構轉換對社交網(wǎng)絡圖graph進行結構轉換mask:合并兩個圖并且只保留兩個圖中都有的頂點和邊,在使用時需要輸入另一個圖作為參數(shù)。groupEdges:用來合并相同Id的邊了解GraphX常用API6.關聯(lián)聚合關聯(lián)轉換與聚合操作是圖計算的一個重點,通過關聯(lián)操作可以將頂點屬性值連接到圖中。而聚合操作可以發(fā)送信息給指定頂點并將數(shù)據(jù)聚集起來,達到指定的目的。關聯(lián)聚合的方法如表所示了解GraphX常用API6.關聯(lián)聚合了解GraphX常用APIcollectNeighbors:該方法的作用是收集每個頂點的鄰居頂點的頂點Id和頂點屬性,鄰居頂點為與該點直接相連的頂點。該方法需要輸入一個參數(shù),返回的結果是頂點Id和頂點屬性的元組。參數(shù)只有以下幾種類型。EdgeDirection.Out:表示只收集以該頂點為起點,鄰居頂點為目標點的鄰居頂點的頂點Id和頂點信息EdgeDirection.In:表示只收集以鄰居頂點作為起點,該點作為目標點的鄰居頂點的頂點Id和頂點信息EdgeDirection.Either:收集所有鄰居頂點的頂點Id和頂點信息6.關聯(lián)聚合collectNeighborIds:該方法與collectNeighbors方法一致,只是該方法只返回頂點Id,不返回頂點信息了解GraphX常用API6.關聯(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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論