Graphx中pregel详解及具体应用分析(以PageRank为例)

Spark Graphx Pregel(pregel参数详解,pregel调用实现过程的详细解释) Spark Graphx Pregel一.Pregel概述1.什么是pregel?2.pregel应用场景二.Pregel源码及参数解释1.源码2.参数详细解释(1)initialMsg(2)maxIteration(3)activeDirection(4)vprog(5)sendMsg(6)mergeMsg三.Pregel计算顶点5 到 其他各顶点的 最短距离1.图信息(1)顶点信息(2)边信息2.Pregel原理分析(1)调用pregel方法之前(2)当调用pregel方法开始(3)第一次迭代开始(4) 阅读详情

Spark Pregel参数说明

Pregel是个强大的基于图的迭代算法,也是Spark中的一个迭代应用aggregateMessage的典型案例,用它可以在图中方便的迭代计算,如最短路径、关键路径、n度关系等。然而对于之前对图计算接触不多的童鞋来说,这个api还算是一个比较重量组的接口,不太容易理解。 Spark中的Pregel定义如下:

def pregel[A: ClassTag](
      initialMsg: A,
      maxIterations: Int = Int.MaxValue,
      activeDirection: EdgeDirection = EdgeDirection.Either)(
      vprog: (VertexId, VD, A) => VD,
      sendMsg: EdgeTriplet[VD, ED] => Iterator[(VertexId, A)],
      mergeMsg: (A, A) => A)
    : Graph[VD, ED] = {
    Pregel(graph, initialMsg, maxIterations, activeDirection)(vprog, sendMsg, mergeMsg)
  }

各个参数的意义详细解释如下:
initialMsg: 初始化消息,这个初始消息会被用来初始化图中的每个节点的属性,在pregel进行调用时,会首先在图上使用mapVertices来根据initialMsg的值更新每个节点的值,至于如何更新,则由vprog参数而定,vprog函数就接收了initialMsg消息做为参数来更新对应节点的值

maxIterations: 最大迭代次数

activeDirection: 表示边的活跃方向,什么是活跃方向呢,首先要解释一下活跃消息与活跃顶点的概念,活跃节点是指在某一轮迭代中,pregel会以sendMsg和mergeMsg为参数来调用graph的aggregateMessage方法后收到消息的节点,活跃消息就是这轮迭代中所有被收成功收到的消息。这样一来,有的边的src节点是活跃节点,有的dst节点是活跃节点,而有的边两端节点都是活跃节点。如果activeDirection参数指定为“EdgeDirection.Out”,则在下一轮迭代时,只有接收消息的出边(src—>dst)才会执行sendMsg函数,也就是说,sendMsg回调函数会过滤掉”dst—>src”的edgeTriplet上下文参数

vprog: 节点变换函数,在初始时,以及每轮迭代后,pregel会根据上一轮使用的msg和这里的vprod函数在图上调用joinVertices方法变化每个收到消息的节点,注意这个函数除初始时外,都是仅在接收到消息的节点上运行,这一点可以从源码中看到,源码中用的是joinVertices(message)(vprog),因此,没有收到消息的节点在join之后就滤掉了

sendMsg: 消息发送函数,该函数的运行参数是一个代表边的上下文,pregel在调用aggregateMessages时,会将EdgeContext转换成EdgeTriplet对象(ctx.toEdgeTriplet)来使用,用户需要通过Iterator[(VertexId,A)]指定发送哪些消息,发给那些节点,发送的内容是什么,因为在一条边上可以发送多个消息,如sendToDst,如sendToSrc,所以这里是个Iterator,每一个元素是一个tuple,其中的vertexId表示要接收此消息的节点的id,它只能是该边上的srcId或dstId,而A就是要发送的内容,因此如果是需要由src发送一条消息A给dst,则有:Iterator((dstId,A)),如果什么消息也不发送,则可以返回一个空的Iterator:Iterator.empty

mergeMsg: 邻居节点收到多条消息时的合并逻辑,注意它区别于vprog函数,mergeMsg仅能合并消息内容,但合并后并不会更新到节点中去,而vprog函数可以根据收到的消息(就是mergeMsg产生的结果)更新节点属性。
 

PageRank例子:

  def pageRank(tol: Double, resetProb: Double = 0.15): Graph[Double, Double] = {
    PageRank.runUntilConvergence(graph, tol, resetProb)
  }

 

  def runUntilConvergence[VD: ClassTag, ED: ClassTag](
    graph: Graph[VD, ED], tol: Double, resetProb: Double = 0.15): Graph[Double, Double] =
  {
      runUntilConvergenceWithOptions(graph, tol, resetProb)
  }

 

  def runUntilConvergenceWithOptions[VD: ClassTag, ED: ClassTag](
      graph: Graph[VD, ED], tol: Double, resetProb: Double = 0.15,
      srcId: Option[VertexId] = None): Graph[Double, Double] =
  {
    require(tol >= 0, s"Tolerance must be no less than 0, but got ${tol}")
    require(resetProb >= 0 && resetProb <= 1, s"Random reset probability must belong" +
      s" to [0, 1], but got ${resetProb}")

    val personalized = srcId.isDefined
    val src: VertexId = srcId.getOrElse(-1L)

    // Initialize the pagerankGraph with each edge attribute
    // having weight 1/outDegree and each vertex with attribute 1.0.
    val pagerankGraph: Graph[(Double, Double), Double] = graph
      // Associate the degree with each vertex
      .outerJoinVertices(graph.outDegrees) {
        (vid, vdata, deg) => deg.getOrElse(0)
      }
      // Set the weight on the edges based on the degree
      .mapTriplets( e => 1.0 / e.srcAttr )
      // Set the vertex attributes to (initialPR, delta = 0)
      .mapVertices { (id, attr) =>
        if (id == src) (resetProb, Double.NegativeInfinity) else (0.0, 0.0)
      }
      .cache()

    // Define the three functions needed to implement PageRank in the GraphX
    // version of Pregel
    def vertexProgram(id: VertexId, attr: (Double, Double), msgSum: Double): (Double, Double) = {
      val (oldPR, lastDelta) = attr
      val newPR = oldPR + (1.0 - resetProb) * msgSum
      (newPR, newPR - oldPR)
    }

    def personalizedVertexProgram(id: VertexId, attr: (Double, Double),
      msgSum: Double): (Double, Double) = {
      val (oldPR, lastDelta) = attr
      var teleport = oldPR
      val delta = if (src==id) 1.0 else 0.0
      teleport = oldPR*delta

      val newPR = teleport + (1.0 - resetProb) * msgSum
      val newDelta = if (lastDelta == Double.NegativeInfinity) newPR else newPR - oldPR
      (newPR, newDelta)
    }

    def sendMessage(edge: EdgeTriplet[(Double, Double), Double]) = {
      if (edge.srcAttr._2 > tol) {
        Iterator((edge.dstId, edge.srcAttr._2 * edge.attr))
      } else {
        Iterator.empty
      }
    }

    def messageCombiner(a: Double, b: Double): Double = a + b

    // The initial message received by all vertices in PageRank
    val initialMessage = if (personalized) 0.0 else resetProb / (1.0 - resetProb)

    // Execute a dynamic version of Pregel.
    val vp = if (personalized) {
      (id: VertexId, attr: (Double, Double), msgSum: Double) =>
        personalizedVertexProgram(id, attr, msgSum)
    } else {
      (id: VertexId, attr: (Double, Double), msgSum: Double) =>
        vertexProgram(id, attr, msgSum)
    }

    Pregel(pagerankGraph, initialMessage, activeDirection = EdgeDirection.Out)(
      vp, sendMessage, messageCombiner)
      .mapVertices((vid, attr) => attr._1)
  } // end of deltaPageRank

Spark系列 (七)SparkGraphX下的Pregel方法----完美解决单源最短路径的应用算法 文章目录Pregel框架:一:Spark GraphX Pregel:二:Pregel计算过程:Pregel函数源码及各个参数解析:三:案例:单源最短路径第一步:调用pregel方法:第二步:第一次迭代:第三步:第二次迭代:第四步:不断迭代,直至所有顶点处于钝化态案例代码如下: Pregel框架: 一:Spark GraphX Pregel: Pregel是google提出的用于大规模分布式图计算框架 图遍历(bfs) 单源最短路径(sssp) pageRank计算 Pregel的计算有一系列迭代组 阅读详情

相关推荐

大数据技术之_19_Spark学习_05_Spark GraphX 应用解析 + Spark GraphX 概述、解析 + 计算模式 + Pregel API + 图算法参考代码 + PageRank

大数据技术之_19_Spark学习_05_Spark GraphX 应用解析 + Spark GraphX 概述、解析 + 计算模式 + Pregel API + 图算法参考代码 + PageRank

黑泽君 1283

大数据基础之Spark——Spark pregel详细过程,一看就懂

Pregel概述 Pregel是Google提出的用于大规模分布式图计算框架   - 图遍历(BFS)   - 单源最短路径(SSSP)   - PageRank计算 Pregel的计算由一系列迭代组成,称为supersteps Pregel迭代过程   - 每个顶点从上一个superstep接收入站消息   - 计算顶点新的属性值   - 在下一个superstep中想相邻的顶点发送消息   - 当没有剩余消息是,迭代结束 Pregel原理分析 pregel函数源码以及各个参数的简介: def p

Clozzz的博客 1299

Spark Graphx 项目实战(航班飞行网图分析)

航班飞行网图分析一.需要的技能点二.任务描述三.数据探索1.下载数据2.数据格式四.航班飞行网图问题分析1.构建航班飞行网图2.统计航班飞行网图中机场与航线的数量3.计算最长的飞行航线4.找出最繁忙的机场5.找出最重要的飞行航线6.找出最便宜的飞行航线五.代码实现 一.需要的技能点 Spark GraphX API Spark GraphX PageRank Spark GraphX Pregel 二.任务描述 需求概述: 探索航班飞行网图数据 构建航班飞行网图 使用Spark GraphX完成下列任

May_J_Oldhu的博客 1538

Spark Pregel参数说明

Pregel是个强大的基于图的迭代算法,也是Spark中的一个迭代应用aggregateMessage的典型案例,用它可以在图中方便的迭代计算,如最短路径、关键路径、n度关系等。然而对于之前对图计算接触不多的童鞋来说,这个api还算是一个比较重量组的接口,不太容易理解。 Spark中的Pregel定义如下: def pregel[A: ClassTag]( initialMsg: A...

weixin_34245749的博客 316

GraphX图计算编程模型原理与代码实例讲解

GraphX图计算编程模型原理与代码实例讲解 作者:禅与计算机程序设计艺术 1. 背景介绍 1.1 大数据时代的图计算 随着互联网和移动设备的普及,数据量呈现爆炸式增长,数据之间的关系也变得越来越复杂,形成了错

AI天才研究院 675

StarRocks慢查询排查实战:从Query Plan到Profile的保姆级调优指南

本文提供StarRocks慢查询排查的实战指南,从Query Plan解析到Profile诊断,详细讲解如何识别执行计划中的危险信号和优化关键指标。通过物化视图优化、分布式执行调整和资源管控方案,帮助DBA快速定位并解决查询性能问题,提升数据库效率。

weixin_42568801的博客 379

Spark的Graphx学习笔记--Pregel

hi

shangwen_的专栏 1万+

MuJoCo 机械臂关节空间阻抗控制Impedance实现(附代码)

阻抗控制通过调整关节的刚度和阻尼,让机器人在接触时产生顺应性,减少冲击力,其核心目标是在接触外部载荷时能够自适应调整输出力矩,实现力与位置的协同控制。阻抗控制可以很快的到达设定位置,在此基础上,使用mujoco交互中的施加外力操作,可以看到当外力松开后,机械臂也可以很快的回弹回设定位置。其中self.Kp和self.Kd为固定刚度和阻尼系数,通过修改刚度和阻尼参数,可以变得更柔顺来应对各种场景。注释掉该行后,直接simulate仿真可以看到机械臂控制位置震荡等情况,接下来引入关节空间阻抗控制的代码。

darcsdn 1274

sparkGraph的pregel

本文是为了加强s理解park的pergel算法 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200809180931188.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3NTU0NTY1,size_16,color_FFFFFF,t_70 ** 一:Spark GraphX Pregel: *

迎接小天使 392

WPS制作甘特图实操(带图超详细)

一、数据准备 图1 二、添加公式 在表格的E3处添加公式:=IF(C3>=G3,0,IF(C3+D3>=G3,G3-C3,D3)),点击该单元格的右下角。使鼠标箭头变“+”后下拉拖拽,复制该公式。F3处的公式为:=D3-E3,使用相同的拖拽方式复制公式应用,操作完毕如下图3. 图2 图3 三、插入图表 1、选中方框1内容,按住ctrl按键,继续选择2、3列的内容,点击插入全部图表中的条形图,选择2对应的图标样式,生成图6的样式。 点击图6中的3标尺,右击选择数据弹出图8,点击+号选择表格中

m0_49047167的博客 3万+

自动驾驶控制算法——MPC控制算法

自动驾驶MPC控制算法摘要 模型预测控制(MPC)是一种基于系统预测模型的先进控制算法,通过滚动优化方式求解最优控制输入。其核心流程包括:1)使用数学模型预测未来系统状态;2)定义优化目标函数衡量预测误差;3)求解满足约束的最优控制序列;4)仅执行第一步控制并重复该过程。 相比传统PID控制,MPC具有预测未来、多步优化、显式处理约束等优势,特别适合自动驾驶中对安全性要求高的场景,如轨迹跟踪、车道保持、联合纵横向控制、自动泊车和动态避障等。MPC通过状态空间模型预测系统行为,在每个控制周期计算未来N步的控制

swaggytiger的博客 7922

Spark中文手册9:spark GraphX编程指南(2)

问题导读 1.GraphX提供了几种方式从RDD或者磁盘上的顶点和边集合构造图? 2.PageRank算法在图中发挥什么作用? 3.三角形计数算法的作用是什么? Spark中文手册-编程指南 Spark之一个快速的例子Spark之基本概念 Spark之基本概念 Spark之基本概念(2) Spark之基本概念(3) Spark-sql由入门到精

HuFeiHu 834

别急着做AI:FDE教你识别真需求,让AI真正落地

人工智能项目在落地过程中,经常出现业务方高喊“我们要做AI”,却说不清具体应用场景的现象。判断一个需求是否值得用AI实现,不能只看技术流行度,而要从问题出现频率、当前替代方案以及可量化业务价值三个维度展开验证。同时需要冷静比较规则引擎与大模型的边界:不是所有语义任务都要靠生成式模型,稳定、可解释且低成本的传统方案往往更具工程性价比。数据闭环也至关重要,缺乏历史样本与反馈回流路径的项目,很难在真实环境中持续优化。针对智能客服、合同审查或企业知识库等典型场景,可借助人机协同与最小代价的用户验证,逐步筛除伪需求,

weixin_42624889的博客 342

Spark Graphx Pregel原理方法示例源码详解

Pregel计算模型是一个分布式计算模型,主要用于大规模图计算。它的基本思想是迭代计算和顶点为中心,并采用消息传递机制来实现并行计算。

wang2leee的博客 1401

LinuxCNC开发实战:从安装到EtherCAT配置全解析

本文详细解析LinuxCNC开发实战,从系统安装到EtherCAT总线配置全流程。涵盖实时内核优化、伺服驱动器PDO映射、HAL配置及自定义运动学开发,帮助开发者快速搭建工业级数控系统,提升运动控制精度与稳定性。

rgv234567的博客 353

PCIE2.0/PCIE3.0/PCIE4.0/PCIE5.0接口的带宽、速率计算

一、PCIE接口速率: 二、PCIE相关概念: 传输速率为每秒传输量GT/s,而不是每秒位数Gbps,因为传输量包括不提供额外吞吐量的开销位; 比如 PCIe 1.x和PCIe 2.x使用8b / 10b编码方案,导致占用了20% (= 2/10)的原始信道带宽。 GT/s —— Giga transation per second (千兆传输/秒),即每一秒内传输的次数。重点在于描述物理层通信协议的速率属性,可以不和链路宽度等关联。 Gbps —— Giga Bits Per Second

技术联盟 1万+

Spark GraphX 图形数据分析(API PageRank Pregel)

Spark GraphX 图形数据分析GraphX API图的构建与图信息的查看图的算子pageRank应用pregel应用求最短距离 GraphX API 图的基本概念和术语这里介绍,这里以示例来做基本演示与理解 外部依赖除了基本的spark依赖之外,还需导入spark-GraphX 构建如下关系图,圈内数字分别表示各个点的id,以(name,job)作为各点的属性,各点之间形成关系图,边的权重表示为点与点之间的联系 图的构建与图信息的查看 创建图操作(以下为操作步骤,代码在main方法中执行)

weixin_42487460的博客 524

VTK在QT与非QT环境下使用的区别

VTK可以在QT框架内使用,也可以独立于QT使用,这两种使用方式在架构、交互和渲染方面有显著差异。

深之JohnChen的专栏 630

深入理解graphx中的pregel图计算引擎

深入理解graphx中的pregel图计算引擎 一、graphx中的属性 (1)顶点(vertex),顶点包含(id,顶点内容)两部分,其中顶点内容可以是对象或者元组形式 对象形式:User("name", 12) 元组形式:("name", 12) (2)边(edge),包含(srcid, dstid, 边属性),边属性目前使用过程中都是Int或者Double单值形式 (3)三元...

fly_time2012的专栏 1203

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Spark GraphX Pregel 应用

一、Pregel介绍 Pregel是一种基于BSP模型实现的并行图处理系统。 BSP(Bulk Synchronous Parallel Computing Model,块同步并行计算模型,又称“大同步”模型)计算过程包括一系列全局超步(所谓的超步就是计算中的一次迭代),每个超步主要包括三个组件: 局部计算:每个参与的处理器都有自身的计算任务。 通讯:处理器群相互交换数据。 栅栏同步(Barrier Synchronization):当一个处理器遇到“路障”(或栅栏),会等到其他所有处理器完成它们

Bugs那些事儿 631

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

GraphX PageRank

原文出处:https://blog.youkuaiyun.com/lsshlsw/article/details/41176093 一:算法介绍 PageRank是Google专有的算法,用于衡量特定网页相对于搜索引擎索引中的其他网页而言的重要程度。 一个页面的“得票数”由所有链向它的页面的重要性来决定,到一个页面的超链接相当于对该页投一票。一个页面的PageRank...

路卫杰的专栏 896

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Spark GraphX 中的PageRank算法、pregel函数、航班飞行网图分析

PageRank算法 import org.apache.spark.SparkContext import org.apache.spark.graphx.{Edge, Graph, VertexId, VertexRDD} import org.apache.spark.rdd.RDD import org.apache.spark.sql.SparkSession case class User(name:String,age:Int,inDeg:Int,outDeg:Int) objec.

liuyongsheng666的博客 1169

如何选择适合的图计算框架:Pregel、GraphX与TAO应用场景终极指南

在当今大数据时代,**图计算框架**已成为处理复杂关系数据的核心技术。对于系统设计新手来说,理解不同图计算框架的应用场景至关重要。Computer-Science-Papers-For-System-Design项目汇集了三大经典图计算框架的核心论文,本文将为您详细解析Pregel、GraphX和TAO的适用场景,帮助您做出明智的技术选择。 ## 🔍 三大图计算框架概述 ### Pregel

gitblog_00486的博客 379

Spark—GraphX编程指南

GraphX编程指南 GraphX 是新的图形和图像并行计算的Spark API。从整理上看,GraphX 通过引入 弹性分布式属性图(Resilient Distributed Property Graph)继承了Spark RDD:一个将有效信息放在顶点和边的有向多重图。为了支持图形计算,GraphX 公开了一组基本的运算(例如,subgraph,joinVertices和mapReduceTriplets),以及在一个优化后的 PregelAPI的变形。此外,GraphX 包括越来越多的图算法和 bu

6万+

Spark GraphX 网页排名(PageRank)算法

PageRank 是 Google 创始算法,也是图计算领域最经典的排名算法。本文深入解析 PageRank 数学原理,系统讲解 Spark GraphX 的两种实现(静态 & 动态),并结合源码剖析其分布式执行机制。

用一行行优雅代码重构现实的造梦者,坚信简洁即正义的美学践行者。 402

基于Spark GraphX 的图形数据分析

为什么需要图计算 许多大数据以大规模图或网络的形式呈现 许多非图结构的大数据,常会被转换为图模型进行分析 图数据结构很好地表达了数据之间的关联性 图(Graph)的基本概念 图是由顶点集合(vertex)及顶点间的关系集合(边edge)组成的一种网状数据结构 通常表示为二元组:Gragh=(V,E) 可以对事物之间的关系建模 应用场景 在地图应用中寻找最短路径 社交网络关系 网页间超链接关系 图的术语-1 顶点(Vertex) 边(Edge) Graph=(V,E) 集合V={v1,v2,v3} 集合E={

sun_0128的博客 3366
上一篇: Spark GraphX在淘宝的实践
下一篇: GraphX PageRank
buptdavid
博客等级 码龄18年 143粉丝 70原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值