GeaFlow圖計(jì)算快速上手之PageRank算法

GeaFlow(品牌名TuGraph-Analytics) 已正式開(kāi)源,歡迎大家關(guān)注?。?!歡迎給我們 Star 哦!
GitHub?? https://github.com/TuGraph-family/tugraph-analytics
更多精彩內(nèi)容,關(guān)注我們的博客 https://geaflow.github.io/

GeaFlow介紹
GeaFlow(品牌名TuGraph-Analytics)是螞蟻集團(tuán)開(kāi)源的分布式實(shí)時(shí)圖計(jì)算引擎,目前廣泛應(yīng)用于金融風(fēng)控、社交網(wǎng)絡(luò)、知識(shí)圖譜以及數(shù)據(jù)應(yīng)用等場(chǎng)景。GeaFlow的核心能力是流式圖計(jì)算,流式圖計(jì)算相比離線圖計(jì)算提供了一種高時(shí)效性低延遲的圖計(jì)算模式,更多詳細(xì)內(nèi)容參考GeaFlow GitHub介紹->?https://github.com/TuGraph-family/tugraph-analytics
GeaFlow整體架構(gòu)如下所示:
- **GeaFlow DSL** GeaFlow對(duì)用戶提供圖表融合分析語(yǔ)言,采用SQL + ISO/GQL方式.用戶可以通過(guò)類似SQL編程的方式編寫(xiě)實(shí)時(shí)圖計(jì)算任務(wù).
- **GraphView API** GeaFlow以GraphView為核心定義的一套圖計(jì)算的編程接口,包含圖構(gòu)建、圖計(jì)算以及Stream API接口.
- **GeaFlow Runtime** GeaFlow運(yùn)行時(shí),包含GeaFlow圖表算子、task調(diào)度、failover以及shuffle等核心功能.
- **GeaFlow State** GeaFlow的圖狀態(tài)存儲(chǔ),用于存儲(chǔ)圖的點(diǎn)邊數(shù)據(jù).同時(shí)流式計(jì)算的狀態(tài)如聚合狀態(tài)也存放在State中.
- **K8S Deployment** GeaFlow支持K8S的方式進(jìn)行部署運(yùn)行.
- **GeaFlow Console** GeaFlow的管控平臺(tái),包含作業(yè)管理、元數(shù)據(jù)管理等功能.
PageRank算法介紹
PageRank是圖計(jì)算領(lǐng)域一個(gè)應(yīng)用廣泛的算法,由Google公司創(chuàng)始人之一拉里·佩奇與謝爾蓋·布林在1998年發(fā)明,主要用于網(wǎng)頁(yè)的排序。該算法基于網(wǎng)頁(yè)之間相互引用的關(guān)系,將網(wǎng)頁(yè)評(píng)分的思想引入到搜索引擎中,用于計(jì)算網(wǎng)頁(yè)的重要度和排名。
PageRank算法的核心思想是:一個(gè)網(wǎng)頁(yè)的重要度是由其他網(wǎng)頁(yè)對(duì)它的引用數(shù)量和質(zhì)量決定的。如果一個(gè)網(wǎng)頁(yè)被其他網(wǎng)頁(yè)引用得多,那么它的重要度就越高。同時(shí),如果一個(gè)網(wǎng)頁(yè)的引用來(lái)源也很重要,那么它對(duì)被引用網(wǎng)頁(yè)的貢獻(xiàn)也會(huì)更大。
實(shí)現(xiàn)PageRank算法的具體步驟包括:首先構(gòu)建網(wǎng)頁(yè)之間的鏈接關(guān)系圖,然后對(duì)圖進(jìn)行迭代計(jì)算,直到收斂為止。在每一次迭代中,每個(gè)網(wǎng)頁(yè)的得分都會(huì)被重新計(jì)算,并更新到下一次迭代中。最后,按照網(wǎng)頁(yè)得分的大小對(duì)搜索結(jié)果進(jìn)行排序,輸出排名前幾位的網(wǎng)頁(yè)。如下有4個(gè)頁(yè)面,A, B, C, D:

以A點(diǎn)為例,其每一輪的PageRank值計(jì)算方法如下:
PR(A) = d * (PR(D)/ 2 + PR(B)/1 + PR(C)/2) + (1- d)
每一個(gè)點(diǎn)的PageRank值等于其入點(diǎn)的PageRank值除以入點(diǎn)出邊數(shù)的加權(quán)和, 其中d為0~1之間的修正系數(shù).
PageRank算法在搜索引擎中廣泛應(yīng)用,成為搜索引擎排名的重要算法之一。除此之外,PageRank算法的思想也在社交網(wǎng)絡(luò)、推薦系統(tǒng)等領(lǐng)域得到了應(yīng)用。
TuGraph-Analytics實(shí)現(xiàn)PageRank
接口與實(shí)現(xiàn)
TuGraph-Analytics支持在圖查詢里調(diào)用圖算法,語(yǔ)法形式如下:
我們通過(guò)CALL語(yǔ)句調(diào)用具體的算法,通過(guò)YIELD定義算法的返回字段,比如page_rank算法返回點(diǎn)id和page rank值兩個(gè)字段,則可以通過(guò)YIELD(vid, prValue)來(lái)表示。
DSL里面實(shí)現(xiàn)一個(gè)圖算法需要實(shí)現(xiàn)AlgorithmUserFunction接口,其定義如下:
- init
算法的初始化接口,主要完成算法的一些初始化操作. PageRank的init方法實(shí)現(xiàn)如下:
- process
算法的主要處理邏輯,入?yún)楫?dāng)前Active點(diǎn)和要處理的消息,PageRank主要實(shí)現(xiàn)如下:
- getOutputType
定義算法返回類型,PageRank實(shí)現(xiàn)如下:
算法注冊(cè)
算法實(shí)現(xiàn)通過(guò)注解來(lái)定義算法名稱,如下所示:
算法和UDF一樣,需要注冊(cè)或者創(chuàng)建后才能使用. DSL內(nèi)置算法或者UDF在BuildInSqlFunctionTable中進(jìn)行注冊(cè).對(duì)于非內(nèi)置算法,可以通過(guò)create function語(yǔ)句來(lái)創(chuàng)建.
總結(jié)
本文主要介紹實(shí)時(shí)圖計(jì)算引擎GeaFlow的基本架構(gòu),然后介紹了圖算法PageRank的基本原理以及在GeaFlow中的實(shí)現(xiàn)細(xì)節(jié)和使用方式.

GeaFlow(品牌名TuGraph-Analytics) 已正式開(kāi)源,歡迎大家關(guān)注?。?!
歡迎給我們 Star 哦!
Welcome to give us a Star!
GitHub?? https://github.com/TuGraph-family/tugraph-analytics
更多精彩內(nèi)容,關(guān)注我們的博客 https://geaflow.github.io/?