美文网首页
Graphx Pregel 函数解析

Graphx Pregel 函数解析

作者: NazgulSun | 来源:发表于2021-08-25 13:10 被阅读0次

Pregel 模型

        graphX  = graphX.ops().pregel(new ArrayList<String>(),
                20, EdgeDirection.Either(),
                new VProj(), new SendMsg(), new ReduceMsg(),msgClassTag );

有几个参数需要主要的地方:
EdgeDirection:

  • @param activeDirection the direction of edges incident to a vertex that received a message in
  • the previous round on which to run sendMsg. For example, if this is EdgeDirection.Out, only
  • out-edges of vertices that received a message in the previous round will run.

比如有三条边: A->B->C
如果上一轮迭代中, B收到了MSG,那么下一轮迭代的时候会迭代哪些边呢?
这个就是有 EdgeDirection控制;
如果 为 Out,那么 就迭代 B-C;
如果为in,那么就叠戴 A-B,
如果是either,那么迭代 A-B, B-C
如果为both,就不迭代,both的意识是 只有 A-B两个定点 收到消息才会迭代这条边;
Iteration: 为迭代的次数, 一次迭代是指,途中所有节点已经不再更新自己的消息;

每次迭代时候,使用sendMsg 发送消息;
如果对同一个定点发送了多条消息,就会使用 mergeMsg 来合并消息;
而 Vprog,就是节点收到消息之后,做的动作,这个地方有个比较trick 的地方
节点,收到消息之手,会更新属性, 这个更新操作决定了, 这个节点是否继续做迭代;

    static class VProj extends AbstractFunction3<Object,SpkVertex,List<String>,SpkVertex> implements Serializable {

        /**
         * 需要使用newV,VProj 貌似会比较 oldV v2 和 mergeValue 之后的值,如果发生了改变,就认为会认为收到有效的msg,可以继续迭代;
         * @param v1
         * @param v2
         * @param msg
         * @return
         */
        @Override
        public SpkVertex apply(Object v1, SpkVertex v2, List<String> msg) {
            //update the old path
            SpkVertex newV = new SpkVertex(v2.getLabel());
            newV.setProperties(v2.getProperties());
            newV.getProperties().put("path", new ArrayList<>(msg));
            return newV;
        }
    }

我的属性为 spkVertex,最开始我用 老的节点,更新属性,然后返回 v2 本身;
而没有正确实现 spkvertex 的 equal & hash 方法; 使得更新了属性之后,还认为是同一个属性;
程序认为,这个消息之后,属性没有更新,所以达到了停止迭代的条件;

正确的做法,就是 正确的实现 equals,hash方法, 我这里直接返回一个新的 vertex对象; 那么就会持续的迭代数据;

这个地方,调试了很久才出坑;

相关文章

  • Graphx Pregel 函数解析

    Pregel 模型 有几个参数需要主要的地方:EdgeDirection: @param activeDirect...

  • GraphX Pregel源码解析

    关于GraphX和Pregel的相关介绍,可以见这篇文章( http://www.jianshu.com/p/6f...

  • GraphX与GraphLab、Pregel的对比

    分布式批同步BSP Pregel、GraphLab、GraphX都是基于BSP(Bulk Synchronous ...

  • spark graphx pregel

    pregel是谷歌提出的图计算的一个算法的概念。用于迭代的计算每个顶点的属性,直到满足某个条件(达到稳定状态)。 ...

  • Pregel函数

    GraphX Pregel有如下优点 级联可扩性好 scalability 容错性强 能够很好的表示各种图的常用算...

  • spark graphx pregel算法的使用

    用有道云笔记的markdown写的,转了半天格式转不过来,参考原文吧! 有道云原文

  • Graphx图算法介绍

    本文介绍的Graphx的图上算法都是基于Pregel模型实现的。 用户图计算的场景: 1. 数三角形 Grap...

  • Spark GraphX

    Spark GraphX概述 GraphX是Spark的一个组件,专门用来表示图以及进行图的并行计算。GraphX...

  • cJSON源码阅读(二)

    JSON字符串解析函数cJSON_Parse() 真正的解析函数parse_value 字符串类型解析函数 解析数...

  • 函数

    预解析: 变量和函数的预解析 预解析把变量的声明提前(但不赋值) 函数名加括号调用函数 预解析把函数声明和调用都提...

网友评论

      本文标题:Graphx Pregel 函数解析

      本文链接:https://www.haomeiwen.com/subject/ouisiltx.html