




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
SparkGraphX
——圖計(jì)算框架每個(gè)人對(duì)自己的人生都會(huì)有自己的價(jià)值定位和人生追求,生命雖然有限,但用生命所創(chuàng)造的價(jià)值,卻可以與世長存。人生的價(jià)值在于勞動(dòng)、創(chuàng)造與貢獻(xiàn)。社會(huì)需要我們創(chuàng)造價(jià)值,體現(xiàn)的價(jià)值越高,人生才會(huì)越有意義。對(duì)于網(wǎng)頁而言,網(wǎng)頁也是存在價(jià)值的,對(duì)網(wǎng)頁價(jià)值進(jìn)行分析,可以節(jié)省網(wǎng)站建設(shè)的時(shí)間成本,將更多的精力和資源集中在高價(jià)值網(wǎng)頁的設(shè)計(jì)上。PageRank即網(wǎng)頁排名,又稱網(wǎng)頁級(jí)別或佩奇排名,是用于標(biāo)識(shí)網(wǎng)頁的等級(jí)或重要性的一種算法,也是衡量網(wǎng)站好壞的一種標(biāo)準(zhǔn)。通過PageRank算法可以計(jì)算網(wǎng)頁的價(jià)值,使等級(jí)更高、更重要的網(wǎng)頁在搜索結(jié)果中更容易被查找到,從而提高搜索結(jié)果的相關(guān)性和質(zhì)量。任務(wù)背景現(xiàn)有兩份關(guān)于某資訊網(wǎng)站的數(shù)據(jù),一份為網(wǎng)頁信息數(shù)據(jù)文件news_vertices.csv,包含3個(gè)數(shù)據(jù)字段,數(shù)據(jù)字段說明如下表。另一份為網(wǎng)頁之間的鏈接關(guān)系數(shù)據(jù)文件news_edges.csv,包含兩個(gè)數(shù)據(jù)字段,數(shù)據(jù)字段說明如下表。兩份文件的數(shù)據(jù)字段均使用“,”(逗號(hào))進(jìn)行分隔。任務(wù)背景字段名稱說明示例id自定義的簡化的網(wǎng)頁ID1network_id網(wǎng)頁ID191000000000page_type網(wǎng)頁類型,包括4種類型,分別為人才招聘、社區(qū)論壇、教育文化和新聞媒體社區(qū)論壇字段名稱說明示例id_1簡化的起始網(wǎng)頁ID1id_2簡化的連接網(wǎng)頁ID2由于網(wǎng)頁之間是有鏈接的,而PageRank是一個(gè)通過網(wǎng)頁鏈接計(jì)算網(wǎng)頁得分以進(jìn)行網(wǎng)頁排名的算法,因此,為了探究網(wǎng)頁的熱度和網(wǎng)頁之間的相關(guān)性,并實(shí)現(xiàn)網(wǎng)頁價(jià)值排名,可以通過圖計(jì)算的方法進(jìn)行分析。本章任務(wù)如下。首先介紹圖與圖計(jì)算的基本概念、SparkGraphX圖計(jì)算框架及其發(fā)展歷程;并詳細(xì)介紹GraphX中圖計(jì)算的基礎(chǔ)操作的方法;最后使用GraphX對(duì)某資訊網(wǎng)站數(shù)據(jù)進(jìn)行分析,并使用GraphX內(nèi)置的PageRank算法實(shí)現(xiàn)網(wǎng)頁的價(jià)值排名。任務(wù)背景1了解GraphX常用API目錄認(rèn)識(shí)SparkGraphX2統(tǒng)計(jì)網(wǎng)頁價(jià)值排名前10的網(wǎng)頁3學(xué)習(xí)GraphX常用的圖計(jì)算基礎(chǔ)操作前,需要先了解圖與圖計(jì)算的基本概念,并對(duì)SparkGraphX圖計(jì)算框架有基礎(chǔ)的了解。本節(jié)的任務(wù)如下。了解圖和圖計(jì)算的基本概念;了解SparkGraphX的基礎(chǔ)概念和發(fā)展歷程為GraphX框架的使用奠定理論基礎(chǔ)。任務(wù)描述圖是由一個(gè)有窮非空頂點(diǎn)集合和一個(gè)描述頂點(diǎn)之間多對(duì)多關(guān)系的邊集合組成的數(shù)據(jù)結(jié)構(gòu)。圖的結(jié)構(gòu)通常表示為:G(V,E),其中,G表示一個(gè)圖,V是圖G中頂點(diǎn)的集合,E是圖G中邊的集合。圖是一種數(shù)據(jù)元素間為多對(duì)多關(guān)系的數(shù)據(jù)結(jié)構(gòu),加上一組基本操作構(gòu)成的抽象數(shù)據(jù)類型。圖(Graph)是一種復(fù)雜的非線性結(jié)構(gòu),在圖結(jié)構(gòu)中,每個(gè)元素都可以有零個(gè)或多個(gè)前驅(qū),也可以有零個(gè)或多個(gè)后繼,也就是說,元素之間的關(guān)系是任意的。圖可以按照無方向和有方向分為無向圖和有向圖。如果任意兩個(gè)頂點(diǎn)之間都存在邊叫完全圖,有向的邊叫有向完全圖;如果無重復(fù)的邊或者頂點(diǎn)到自身的邊叫簡單圖。了解圖的基本概念淘寶圖譜計(jì)算平臺(tái)如何將各種圖的指標(biāo)精細(xì)化和規(guī)范化,對(duì)于產(chǎn)品和運(yùn)營的構(gòu)思進(jìn)行數(shù)據(jù)上的預(yù)研指導(dǎo),提供科學(xué)決策的依據(jù),是圖譜計(jì)算平臺(tái)設(shè)計(jì)的初衷和出發(fā)點(diǎn)?;谶@樣的出發(fā)點(diǎn),淘寶借助GraphX豐富的接口和工具包,針對(duì)淘寶內(nèi)部林林總總的圖業(yè)務(wù)需求,開發(fā)了一個(gè)圖譜計(jì)算平臺(tái)。新浪微博社交網(wǎng)絡(luò)分析社交網(wǎng)絡(luò)本身就是一個(gè)復(fù)雜的圖關(guān)系結(jié)構(gòu)的網(wǎng)絡(luò),最適合用圖來表達(dá)和計(jì)算了,圖的“頂點(diǎn)”表示社交中的人,“邊”表示人與人之間的關(guān)系。如新浪微博社交網(wǎng)絡(luò)分析,通過用戶之間的關(guān)注、轉(zhuǎn)發(fā)等行為建立了用戶之間的社交網(wǎng)絡(luò)關(guān)系圖,根據(jù)用戶在社交網(wǎng)絡(luò)中所占位置為用戶進(jìn)行分析和應(yīng)用。了解圖計(jì)算的應(yīng)用淘寶、騰訊的推薦應(yīng)用如淘寶推薦商品,騰訊推薦好友等等,將商品之間的交互做成一張大的網(wǎng)絡(luò)圖,騰訊用戶之間的關(guān)系做成一張社交網(wǎng)絡(luò)圖,在應(yīng)用過程中就可以通過點(diǎn)與點(diǎn)之間的關(guān)系將與某商品相關(guān)的其他商品推薦給用戶,或?qū)⑴笥训呐笥岩餐扑]給你作為可能認(rèn)識(shí)的人。了解圖計(jì)算的應(yīng)用Spark的每一個(gè)子框架都有一種抽象數(shù)據(jù)結(jié)構(gòu),SparkGraphX框架的核心抽象數(shù)據(jù)結(jié)構(gòu)是彈性分布式屬性圖(ResilientDistributePropertyGraph,簡稱Graph)。Graph,一種點(diǎn)和邊都帶屬性的有向多重圖,邊有起點(diǎn)和目的節(jié)點(diǎn),頂點(diǎn)間可以有多重關(guān)系。它擴(kuò)展了SparkRDD的抽象,有Table和Graph兩種視圖,而只需要一份物理存儲(chǔ)。兩種視圖都有自己獨(dú)有的操作符,從而獲得了靈活操作和執(zhí)行效率。了解GraphX的基礎(chǔ)概念SparkGraphX是一個(gè)分布式圖處理框架,是一個(gè)基于Spark平臺(tái)提供圖計(jì)算和圖挖掘的簡潔易用且豐富多彩的接口,極大地方便了大家對(duì)分布式圖處理的需求。GraphX的分布式或者并行處理其實(shí)是把圖拆分成很多的子圖,然后分別對(duì)這些子圖進(jìn)行計(jì)算,計(jì)算的時(shí)候可以分別迭代進(jìn)行分階段的計(jì)算。SparkGraphX中包含了對(duì)圖的一系列操作方法(例如,subgraph,joinvertices和aggregatemessages)以及優(yōu)化的變種的PregelAPI。了解GraphX的基礎(chǔ)概念GraphX的發(fā)展歷程了解GraphX的發(fā)展歷程1了解GraphX常用API目錄認(rèn)識(shí)SparkGraphX2統(tǒng)計(jì)網(wǎng)頁價(jià)值排名前10的網(wǎng)頁3SparkGraphX是圖計(jì)算的利器,利用了Spark的分布式系統(tǒng)架構(gòu)完成分布式圖計(jì)算。為了使用GraphX構(gòu)建網(wǎng)頁結(jié)構(gòu)圖并進(jìn)行網(wǎng)頁價(jià)值排名計(jì)算,本節(jié)的任務(wù)如下。了解GraphX中的專業(yè)名稱;學(xué)習(xí)在GraphX中創(chuàng)建和計(jì)算圖的方法。任務(wù)描述Edge:邊對(duì)象,存有srcId,dstId,attr三個(gè)字段,以及一些操作Edge的方法,例:Edge(srcId,dstId,attr)RDD[Edge]:存放著Edge對(duì)象的RDDEdgeRDD:完整提供邊的各種操作類RDD[(VertexId,VD)]:存放頂點(diǎn)的RDD,頂點(diǎn)有VertexId和VD兩個(gè)字段,第一個(gè)是頂點(diǎn)Id,第二個(gè)是頂點(diǎn)屬性。定義一個(gè)頂點(diǎn)例如:(VertexId,VD)VertexRDD:提供頂點(diǎn)的各種操作方法的對(duì)象創(chuàng)建與存儲(chǔ)圖圖的創(chuàng)建是進(jìn)行圖計(jì)算的重要步驟,在SparkGraphX中創(chuàng)建圖的方式很多,根據(jù)不同的數(shù)據(jù)集有不同的方法。GraphX有一個(gè)類Graph,Graph對(duì)象是用戶的操作入口,主要包含邊屬性edge(邊)、頂點(diǎn)屬性vertex(頂點(diǎn))、圖的創(chuàng)建方法、查詢方法和其他轉(zhuǎn)換方法等。創(chuàng)建與存儲(chǔ)圖1.圖的創(chuàng)建用戶信息vertices.txt,有3個(gè)字段,分別為用戶Id,姓名和職業(yè)另一份數(shù)據(jù)“edges.txt”是用戶之間的關(guān)系數(shù)據(jù),有3個(gè)字段,第1、2個(gè)是用戶Id,第3個(gè)是第1個(gè)用戶對(duì)于第2個(gè)用戶的關(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),并且有邊屬性和指向。創(chuàng)建與存儲(chǔ)圖在使用SparkGraphX進(jìn)行操作時(shí),需要先將指定的包導(dǎo)入。創(chuàng)建與存儲(chǔ)圖創(chuàng)建圖的3種方法創(chuàng)建與存儲(chǔ)圖方法描述Graph(vertices,edges,defaultVertexAttr)根據(jù)分開存放的頂點(diǎn)數(shù)據(jù)和邊數(shù)據(jù)創(chuàng)建圖,適用于有頂點(diǎn)數(shù)據(jù)和邊數(shù)據(jù)的情況Graph.fromEdges(RDD[Edge[ED]],defaultValue)根據(jù)邊數(shù)據(jù)創(chuàng)建圖,數(shù)據(jù)需要轉(zhuǎn)換成RDD[Edge[ED]]類型,適用于邊數(shù)據(jù)有邊屬性的的情況Graph.fromEdgeTuples(rawEdges:RDD[(VertexId,VertexId)],defaultValue)根據(jù)邊數(shù)據(jù)創(chuàng)建圖,邊數(shù)據(jù)需要加載為二元組,可以選擇是否對(duì)邊分區(qū),適用于邊數(shù)據(jù)只有起點(diǎn)和目標(biāo)點(diǎn)的情況根據(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(邊屬性)三個(gè)部分。defaultVertexAttr:一個(gè)固定的頂點(diǎn)信息,用于當(dāng)數(shù)據(jù)中出現(xiàn)頂點(diǎn)缺失時(shí)使用。了解GraphX常用API“頂點(diǎn)”
和“邊”
的RDD來自不同的數(shù)據(jù)源,與Spark中其他RDD的建立并沒有區(qū)別,但是頂點(diǎn)Id要求是Long類型。了解GraphX常用API查詢創(chuàng)建完成的圖graph_urelate,可以使用graph_urelate.vertices查看頂點(diǎn)信息,用graph_urelate.edges查看邊信息。了解GraphX常用API根據(jù)邊創(chuàng)建圖(Graph.fromEdges(RDD[Edge[ED]],defaultValue))這種方法相對(duì)而言最為簡單,只是由Edge類型RDD建立圖,邊的屬性沒有則設(shè)為一個(gè)固定值,由“邊”RDD中出現(xiàn)所有頂點(diǎn)(無論是起始點(diǎn)src還是目標(biāo)點(diǎn)dst)自動(dòng)產(chǎn)生頂點(diǎn)vertextId,頂點(diǎn)的屬性將被設(shè)置為一個(gè)默認(rèn)值。fromEdges方法有兩個(gè)參數(shù)值如下。RDD[Edge[ED]]:“邊”類型的RDD,Edge包含(srcId,dstId,prop)defaultValue:VD:默認(rèn)頂點(diǎn)屬性值。了解GraphX常用APIGraph.fromEdges創(chuàng)建圖只需要邊的數(shù)據(jù)。僅根據(jù)“edges.txt”
中的邊數(shù)據(jù)創(chuàng)建圖,頂點(diǎn)由邊數(shù)據(jù)中出現(xiàn)的頂點(diǎn)決定。了解GraphX常用API對(duì)圖的頂點(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常用API根據(jù)邊的兩個(gè)頂點(diǎn)的元組創(chuàng)建圖(Graph.fromEdgeTuples())Graph.fromEdgeTuples()通過邊的兩個(gè)頂點(diǎn)ID組成的二元組創(chuàng)建圖,將一條邊的起點(diǎn)與目標(biāo)點(diǎn)放在一個(gè)二元組中,通過邊的二元組RDD創(chuàng)建圖。rawEdges:RDD[(VertexId,VertexId)]:其中的數(shù)據(jù)類型是一個(gè)起點(diǎn)與目標(biāo)點(diǎn)的元組defaultValue:VD:默認(rèn)屬性值。uniqueEdges:Option[PartitionStrategy]=None:是否對(duì)邊進(jìn)行分區(qū)選項(xiàng),可選可不選,默認(rèn)不分區(qū)了解GraphX常用APIfromEdgeTuples僅需要邊的起點(diǎn)和目標(biāo)點(diǎn),將數(shù)據(jù)“edges.txt”作為輸入數(shù)據(jù),通過fromEdgeTuples方法構(gòu)造圖。了解GraphX常用API對(duì)圖的邊和頂點(diǎn)進(jìn)行查詢了解GraphX常用API常見的圖的緩存和釋放緩存方法了解GraphX常用API圖的緩存及釋放方法描述cache()緩存整個(gè)圖,默認(rèn)存儲(chǔ)在內(nèi)存中persist(newLevel:StorageLevel=StorageLevel.MEMORY_ONLY)緩存整個(gè)圖,可以指定存儲(chǔ)級(jí)別unpersist()釋放整個(gè)圖的緩存unpersistVertices(blocking:Boolean=true)釋放頂點(diǎn)緩存edges.unpersist(blocking:Boolean=true)釋放邊緩存(1)圖的緩存在Spark中,RDD默認(rèn)沒有持久化在內(nèi)存中。當(dāng)多次使用某個(gè)變量時(shí),為了避免重復(fù)計(jì)算,變量必須被明確緩存,GraphX中的圖也是相同的方式。當(dāng)一個(gè)圖需要多次計(jì)算使用時(shí),需要對(duì)圖進(jìn)行緩存,緩存有cache和persist兩種方法。對(duì)于persist,如果想指定緩存類型為StorageLevel.MEMORY_ONLY,需要導(dǎo)入org.apache.spark.storage.StorageLevel包。了解GraphX常用API(2)釋放緩存對(duì)于已經(jīng)完成計(jì)算無需再使用的緩存內(nèi)容可以進(jìn)行釋放,在迭代過程中無需再使用的緩存也可以釋放。釋放緩存方法有如下3種。Graph.unpersist(blocking=true):釋放整個(gè)圖緩存Graph.unpersistVertices(blocking=true):釋放內(nèi)存中緩存的vertices。Graph.edges.unpersist(blocking=true):釋放邊緩存,使用對(duì)邊進(jìn)行修改,但會(huì)重復(fù)使用點(diǎn)進(jìn)行運(yùn)算的操作。了解GraphX常用API圖創(chuàng)建之后,對(duì)所創(chuàng)建的圖進(jìn)行查詢。查詢內(nèi)容包括頂點(diǎn)與邊的個(gè)數(shù),頂點(diǎn)與邊的視圖,出度數(shù)(以當(dāng)前頂點(diǎn)為起點(diǎn)的邊的數(shù)量),入度數(shù)(以當(dāng)前頂點(diǎn)為目標(biāo)點(diǎn)的邊的數(shù)量)?;镜姆椒ㄈ缦卤怼2樵兣c轉(zhuǎn)換數(shù)據(jù)1.?dāng)?shù)據(jù)查詢方法描述numVertices查詢頂點(diǎn)個(gè)數(shù)numEdges查詢邊數(shù)degrees(in/out)查詢度數(shù)vertices查詢頂點(diǎn)信息edges查詢邊信息(1)頂點(diǎn)查詢和邊查詢numEdges:查詢圖中邊的數(shù)量numEdge方法可以查詢邊的數(shù)量,不需要輸入任何參數(shù),直接通過Graph.numEdges查詢,返回類型為Long類型。numVertices:查詢圖中頂點(diǎn)個(gè)數(shù)numVertices方法可以查詢頂點(diǎn)個(gè)數(shù),不需要輸入任何參數(shù),直接通過Graph.numVertices查詢,返回類型為Long類型。查詢與轉(zhuǎn)換數(shù)據(jù)(2)視圖操作SparkGraphX中有3種基本視圖可以訪問,包括頂點(diǎn)視圖(Vertices)、邊視圖(Edges)和整體視圖(Triplets),如下圖。假設(shè)有一個(gè)Graph的實(shí)例graph,通過graph.vertices、graph.edges、graph.triplets即可訪問3種視圖。查詢與轉(zhuǎn)換數(shù)據(jù)頂點(diǎn)視圖:頂點(diǎn)視圖可以查看頂點(diǎn)的信息,通過graph.vertices可以返回一個(gè)VertexRDD[(VD],VD為頂點(diǎn)屬性,它繼承于RDD[(VertexID,VD)],所以可以看到頂點(diǎn)的ID和屬性,也可以用Scala的case表達(dá)式解構(gòu)這個(gè)元組直接查看頂點(diǎn)信息:graph.vertices.collect通過模式匹配解構(gòu)元組:根據(jù)返回的頂點(diǎn)字段數(shù),通過模式匹配返回的RDD類型元組查詢與轉(zhuǎn)換數(shù)據(jù)頂點(diǎn)視圖增加過濾條件的頂點(diǎn)視圖:通過filter方法增加過濾條件查詢感興趣的頂點(diǎn)信息通過下標(biāo)查詢:可以直接根據(jù)Spark元組的特性通過下標(biāo)的方式訪問返回的頂點(diǎn)信息查詢與轉(zhuǎn)換數(shù)據(jù)邊視圖:邊視圖只會(huì)返回邊的信息。graph.edges返回一個(gè)包含Edge[ED]對(duì)象的EdgeRDD,ED表示邊屬性的類型。Edge有三個(gè)字段:起點(diǎn)Id、目標(biāo)點(diǎn)Id、邊屬性。并且可以通過case類的類型構(gòu)造器匹配返回的EdgeRDD。直接查看所有邊信息:graph.edges.collect查詢與轉(zhuǎn)換數(shù)據(jù)邊視圖通過模式匹配解構(gòu)并且添加過濾條件:用模式匹配Edge類型的返回結(jié)果,再利用filter進(jìn)行過濾通過下標(biāo)查詢:通過下標(biāo)查詢時(shí),由于Edge類中有三個(gè)屬性srcId,dstId和attr,因此可以直接指定屬性訪問查詢與轉(zhuǎn)換數(shù)據(jù)頂點(diǎn)與邊的三元組整體視圖:三元視圖邏輯上將頂點(diǎn)和邊的屬性保存為一個(gè)RDD[EdgeTriplet[VD,ED]],它包含EdgeTriplet類的實(shí)例。EdgeTriplet類繼承于Edge類,所以可以直接訪問Edge類的三個(gè)屬性,并且加入了srcAttr和dstAttr成員,這兩個(gè)成員分別包含起點(diǎn)和目標(biāo)點(diǎn)的屬性。graph.triplets可以查看到邊和頂點(diǎn)的所有信息,是一個(gè)完整的視圖直接查詢:graph.triplets.collect,查詢用戶關(guān)系網(wǎng)絡(luò)圖,返回結(jié)果包含頂點(diǎn)和邊的所有信息,包括邊的起點(diǎn)和目標(biāo)點(diǎn),起點(diǎn)屬性,目標(biāo)點(diǎn)屬性,邊屬性。查詢與轉(zhuǎn)換數(shù)據(jù)頂點(diǎn)與邊的三元組整體視圖通過下標(biāo)查詢:通過新成員變量srcAttr,dstAttr可以訪問起點(diǎn)屬性和目標(biāo)點(diǎn)屬性,可以用邊的字段訪問邊的屬性。查詢與轉(zhuǎn)換數(shù)據(jù)(3)度分布計(jì)算度分布計(jì)算:度分布檢測的目的,主要是了解圖中“超級(jí)節(jié)點(diǎn)”
的個(gè)數(shù)和規(guī)模,以及所有節(jié)點(diǎn)度的分布曲線。超級(jí)節(jié)點(diǎn)的存在對(duì)各種傳播算法都會(huì)有重大的影響(不論是正面助力還是反面阻力),因此要預(yù)先對(duì)這些數(shù)據(jù)量有個(gè)預(yù)估。借助GraphX最基本的圖信息接口degrees:VertexRDD[Int](包括inDegrees和outDegrees),這個(gè)指標(biāo)可以輕松計(jì)算出來,并進(jìn)行各種各樣的統(tǒng)計(jì)。degrees:返回每個(gè)頂點(diǎn)的度inDegrees:計(jì)算每個(gè)頂點(diǎn)的入度數(shù),不需要參數(shù)outDegrees:計(jì)算頂點(diǎn)的出度,不需要參數(shù)查詢與轉(zhuǎn)換數(shù)據(jù)自定義函數(shù)&內(nèi)置函數(shù):用戶如果想要對(duì)圖的度進(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等等對(duì)度進(jìn)行統(tǒng)計(jì),graph.degrees返回的是VertexRDD[Int],即(VertexID,Int),需要調(diào)換成RDD[(Int,VetexId)],因?yàn)檫@些函數(shù)都是對(duì)第一個(gè)值也就是key操作的。查詢與轉(zhuǎn)換數(shù)據(jù)轉(zhuǎn)換數(shù)據(jù)操作的重要特征是,允許所得圖形重用原有圖形的結(jié)構(gòu)索引,即還能保存圖的結(jié)構(gòu)。SparkGraphX常見的數(shù)據(jù)轉(zhuǎn)換方法主要如下表。查詢與轉(zhuǎn)換數(shù)據(jù)2.
數(shù)據(jù)轉(zhuǎn)換方法描述mapVertices[VD2:ClassTag](map:(VertexId,VD)=>VD2)對(duì)頂點(diǎn)屬性經(jīng)過變換生成新的圖mapEdges[ED2](map:Edge[ED]=>ED2)對(duì)邊屬性經(jīng)過變換生成新的圖mapTriplets[ED2:ClassTag](map:EdgeTriplet[VD,ED]=>ED2)對(duì)邊屬性經(jīng)過變換生成新的圖(1)mapVertices()mapVertices:通過graph.mapVertices直接對(duì)頂點(diǎn)進(jìn)行map,返回按用戶提供函數(shù)改變了圖中頂點(diǎn)屬性的值或類型之后的圖。該方法主要需要一個(gè)函數(shù),調(diào)用Spark中的map操作,更新頂點(diǎn)的屬性值,由VD-->newVD。查詢與轉(zhuǎn)換數(shù)據(jù)(2)mapEdges()mapEdges:通過graph.mapEdges直接對(duì)邊的屬性進(jìn)行操作,調(diào)用Spark中的map操作更新邊的屬性值,由ED-->newED,返回按用戶提供函數(shù)改變圖中邊屬性的值或類型之后的圖。查詢與轉(zhuǎn)換數(shù)據(jù)(3)mapTriplets()mapTriplets:該方法的操作也是針對(duì)邊的屬性值,通過調(diào)用Spark中的map操作更新邊的屬性值,由ED-->newED。例如將邊的屬性用起點(diǎn)的屬性的第一個(gè)值姓名替換。查詢與轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換是對(duì)整個(gè)圖的結(jié)構(gòu)進(jìn)行操作,生成新的圖。SparkGraphX中圖的結(jié)構(gòu)轉(zhuǎn)化操作方法也是存放在類Graph中,主要方法如下表。轉(zhuǎn)換結(jié)構(gòu)與關(guān)聯(lián)聚合數(shù)據(jù)1.結(jié)構(gòu)轉(zhuǎn)換方法描述reverse反轉(zhuǎn)圖中所有邊的方向subgraph按照設(shè)定條件取出子圖mask取兩個(gè)圖的公共頂點(diǎn)和邊作為新圖,并保持前一個(gè)圖頂點(diǎn)與邊的屬性groupEdges合并邊相同的屬性通過user.txt和relate.txt創(chuàng)建用戶社交網(wǎng)絡(luò)圖reverse:返回一個(gè)新的圖,這個(gè)圖的邊的方向與原圖相比都是反轉(zhuǎn)的。沒有修改頂點(diǎn)或者邊的屬性或者改變邊的數(shù)量,不需要輸入其他參數(shù)。轉(zhuǎn)換結(jié)構(gòu)與關(guān)聯(lián)聚合數(shù)據(jù)對(duì)社交網(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)屬性個(gè)數(shù)。對(duì)于邊屬性,可以通過epred字段匹配,其中的屬性可以通過默認(rèn)屬性名獲取。轉(zhuǎn)換結(jié)構(gòu)與關(guān)聯(lián)聚合數(shù)據(jù)對(duì)社交網(wǎng)絡(luò)圖graph進(jìn)行結(jié)構(gòu)轉(zhuǎn)換mask:合并兩個(gè)圖并且只保留兩個(gè)圖中都有的頂點(diǎn)和邊,在使用時(shí)需要輸入另一個(gè)圖作為參數(shù)。groupEdges:用來合并相同Id的邊。轉(zhuǎn)換結(jié)構(gòu)與關(guān)聯(lián)聚合數(shù)據(jù)關(guān)聯(lián)轉(zhuǎn)換與聚合操作是圖計(jì)算的一個(gè)重點(diǎn),通過關(guān)聯(lián)操作可以將頂點(diǎn)屬性值連接到圖中。而聚合操作可以發(fā)送信息給指定頂點(diǎn)并將數(shù)據(jù)聚集起來,達(dá)到指定的目的。關(guān)聯(lián)聚合的方法如下表。轉(zhuǎn)換結(jié)構(gòu)與關(guān)聯(lián)聚合數(shù)據(jù)2.?dāng)?shù)據(jù)關(guān)聯(lián)聚合方法描述collectNeighbors(edgeDirection:EdgeDirection)收集鄰居頂點(diǎn)的頂點(diǎn)Id和頂點(diǎn)屬性collectNeighborIds(edgeDirection:EdgeDirection)收集鄰居頂點(diǎn)的頂點(diǎn)IdmapReduceTriplets向指定頂點(diǎn)發(fā)送信息并聚合信息aggregateMessages向指定頂點(diǎn)發(fā)送信息并聚合信息joinVertices將頂點(diǎn)信息更新到圖中outerJoinVertices將頂點(diǎn)信息更新到圖中(1)collectNeighbors()collectNeighbors:該方法的作用是收集每個(gè)頂點(diǎn)的鄰居頂點(diǎn)的頂點(diǎn)Id和頂點(diǎn)屬性,鄰居頂點(diǎn)為與該點(diǎn)直接相連的頂點(diǎn)。該方法需要輸入一個(gè)參數(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)信息。轉(zhuǎn)換結(jié)構(gòu)與關(guān)聯(lián)聚合數(shù)據(jù)(2)collectNeighborIds()collectNeighborIds:該方法與collectNeighbors方法一致,只是該方法只返回頂點(diǎn)Id,不返回頂點(diǎn)信息。轉(zhuǎn)換結(jié)構(gòu)與關(guān)聯(lián)聚合數(shù)據(jù)(3)aggregateMessages()aggregateMessages:GraphX中的核心聚合操作是aggregateMessages,它主要功能是向鄰邊發(fā)消息,合并鄰邊收到的消息。aggregateMessages方法定義如下。defaggregateMessages[Msg:ClassTag]( sendMsg:EdgeContext[VD,ED,Msg]=>Unit, mergeMsg:(Msg,Msg)=>Msg, tripletFields:TripletFields=TripletFields.All):VertexRDD[A]轉(zhuǎn)換結(jié)構(gòu)與關(guān)聯(lián)聚合數(shù)據(jù)aggregateMessagessendMsg:看做map-reduce過程中的map函數(shù),向鄰邊發(fā)消息,應(yīng)用到圖的每個(gè)邊三元組(edgetriplet)。mergeMsg:指定兩個(gè)消息到相同的頂點(diǎn)并保存為一個(gè)消息??梢詫ergeMsg函數(shù)看做map-reduce過程中的reduce函數(shù)。TripletFields可選項(xiàng):它指出哪些數(shù)據(jù)將被訪問(源頂點(diǎn)特征,目的頂點(diǎn)特征或者兩者同時(shí),即有三種可選擇的值:TripletFields.Src,TripletFields.Dst,TripletFields.All。轉(zhuǎn)換結(jié)構(gòu)與關(guān)聯(lián)聚合數(shù)據(jù)(4)joinVertices()joinVertices:joinVertices的功能是連接其他頂點(diǎn),將其他頂點(diǎn)的頂點(diǎn)信息與圖中的頂點(diǎn)信息處理后更新圖的頂點(diǎn)信息,返回值的類型就是圖結(jié)構(gòu)頂點(diǎn)屬性的類型,不能新增,也不可以減少(即不能改變?cè)紙D結(jié)構(gòu)頂點(diǎn)屬性類型和個(gè)數(shù))。轉(zhuǎn)換結(jié)構(gòu)與關(guān)聯(lián)聚合數(shù)據(jù)(5)outerJoinVertices()outerJoinVertices:與前面JoinVertices不同之處在于頂點(diǎn)屬性更新后類型是VD2,不再是VD,因此不受原圖graph頂點(diǎn)屬性類型VD的限制,在outerJoinVertices中使用者可以隨意定義自己想要的返回類型,從而可以完全改變圖的頂點(diǎn)屬性值的類型和屬性的個(gè)數(shù)。轉(zhuǎn)換結(jié)構(gòu)與關(guān)聯(lián)聚合數(shù)據(jù)1了解GraphX常用API目錄認(rèn)識(shí)SparkGraphX2統(tǒng)計(jì)網(wǎng)頁價(jià)值排名前10的網(wǎng)頁3為探究某資訊網(wǎng)站內(nèi)網(wǎng)頁的熱度和內(nèi)容相關(guān)性,需要構(gòu)建網(wǎng)頁結(jié)構(gòu)圖,并使用圖計(jì)算的方法實(shí)現(xiàn)網(wǎng)頁排名。本節(jié)的任務(wù)如下。根據(jù)某資訊網(wǎng)站數(shù)據(jù),使用SparkGraphX構(gòu)建出網(wǎng)頁結(jié)構(gòu)圖;使用GraphX內(nèi)置的PageRank算法計(jì)算網(wǎng)頁得分;根據(jù)網(wǎng)頁得分降序排序找出排名前10的網(wǎng)頁。任務(wù)描述目前所獲得的某資訊網(wǎng)站數(shù)據(jù)有兩份。一份是網(wǎng)頁信息數(shù)據(jù)news_vertices.csv,可作為圖的頂點(diǎn)數(shù)據(jù)。另一份數(shù)據(jù)是網(wǎng)頁之間的鏈接關(guān)系數(shù)據(jù)news_edges.csv,可作為圖的邊數(shù)據(jù)。構(gòu)建網(wǎng)頁結(jié)構(gòu)圖的具體實(shí)現(xiàn)過程如下。將兩份數(shù)據(jù)上傳至HDFS中。在spark-shell中導(dǎo)入構(gòu)建圖所需要的包。讀取news_vertices.csv文件的數(shù)據(jù),并選擇第1個(gè)和第3個(gè)數(shù)據(jù)字段(即自定義的網(wǎng)頁簡化ID和網(wǎng)頁類型)作為頂點(diǎn),讀取news_
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 河北省保定市定州市2023-2024學(xué)年五年級(jí)下學(xué)期英語期中試卷(含答案)
- 施工單位安全教育培訓(xùn)管理制度
- 新建、改建、擴(kuò)建工程項(xiàng)目安全設(shè)施“三同時(shí)”制度
- 金地名著樓層止水方案
- 樣板間裝修施工方案
- 治理中小學(xué)有償補(bǔ)課工作實(shí)施方案
- 渠道分銷合同合同
- 老年社會(huì)工作小組方案設(shè)計(jì)
- 數(shù)獨(dú)教案-完整版
- 某科技公司新三板股權(quán)激勵(lì)方案規(guī)劃書
- 2024年宿州農(nóng)商銀行社會(huì)招聘筆試真題
- 2025年正德職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫及參考答案
- 2025-2030年中國山葵制品行業(yè)運(yùn)行現(xiàn)狀及發(fā)展前景分析報(bào)告
- 2025年甘肅省白銀市景泰縣公益性崗位招聘9人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- (新版)大堂經(jīng)理持證上崗(廳堂服務(wù)類)考試題庫(含答案)
- 《光電對(duì)抗原理與應(yīng)用》課件第5章
- 三維建模合同
- 八年級(jí)勞動(dòng)教育國家測試題及答案
- 2025年中煤集團(tuán)華東分公司及所屬項(xiàng)目公司公開招聘管理單位筆試遴選500模擬題附帶答案詳解
- 《海洋牧場巖土工程勘察規(guī)程》
- 2024年吉林省高職高專單招考試數(shù)學(xué)試題(含答案)
評(píng)論
0/150
提交評(píng)論