Spark GraphX 聚合求和

2024-02-15

我正在尝试计算 Spark graphx 图中节点值的总和。简而言之,该图是一棵树,顶部节点(根)应将所有子节点及其子节点相加。我的图实际上是一棵树,看起来像这样预期总和值应为 1850:

                                     +----+
                     +--------------->    |  VertexID 14
                     |               |    |  Value: 1000
                 +---+--+            +----+
    +------------>      | VertexId 11
    |            |      | Value:     +----+
    |            +------+ Sum of 14 & 24  |  VertexId 24
+---++                +-------------->    |  Value: 550
|    | VertexId 20                   +----+
|    | Value:
+----++Sum of 11 & 911
      |
      |           +-----+
      +----------->     | VertexId 911
                  |     | Value: 300
                  +-----+

第一个尝试看起来像这样:

val vertices: RDD[(VertexId, Int)] =
      sc.parallelize(Array((20L, 0)
        , (11L, 0)
        , (14L, 1000)
        , (24L, 550)
        , (911L, 300)
      ))

  //note that the last value in the edge is for factor (positive or negative)
    val edges: RDD[Edge[Int]] =
      sc.parallelize(Array(
        Edge(14L, 11L, 1),
        Edge(24L, 11L, 1),
        Edge(11L, 20L, 1),
        Edge(911L, 20L, 1)
      ))

    val dataItemGraph = Graph(vertices, edges)


    val sum: VertexRDD[(Int, BigDecimal, Int)] = dataItemGraph.aggregateMessages[(Int, BigDecimal, Int)](
      sendMsg = { triplet => triplet.sendToDst(1, triplet.srcAttr, 1) },
      mergeMsg = { (a, b) => (a._1, a._2 * a._3 + b._2 * b._3, 1) }
    )

    sum.collect.foreach(println)

这将返回以下内容:

(20,(1,300,1))
(11,(1,1550,1))

它正在对顶点 11 进行求和,但不会向上滚动到根节点(顶点 20)。我错过了什么或者有更好的方法吗?当然,树可以是任意大小,每个顶点可以有任意数量的子边。


鉴于该图是有向的(正如您的示例所示),应该可以编写一个 Pregel 程序来执行您所要求的操作:

val result = 
 dataItemGraph.pregel(0, activeDirection = EdgeDirection.Out)(
  (_, vd, msg) => msg + vd, 
  t => Iterator((t.dstId, t.srcAttr)), 
  (x, y) => x + y
 )

 result.vertices.collect().foreach(println)

// Output is:
// (24,550)
// (20,1850)
// (14,1000)
// (11,1550)
// (911,300)

我在用着EdgeDirection.Out这样消息只能从下到上发送(否则我们将陷入无限循环)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark GraphX 聚合求和 的相关文章

随机推荐

  • IIS:如何从命令行取消部署/删除/删除 Web 应用程序?

    假设本地 IIS 服务器上部署了一个 Web 应用程序 当我需要删除 取消部署它时 我可以转到 IIS 管理器 右键单击该应用程序 然后选择 删除应用程序和内容 等等 但是 我需要从命令行执行相同的操作 如何执行 可以假设应用程序的名称是已
  • 如何获取 PostgreSQL 中特定模式的数据库中存储的所有函数的列表?

    我希望能够连接到 PostgreSQL 数据库并找到特定模式的所有函数 我的想法是 我可以对 pg catalog 或 information schema 进行一些查询并获取所有函数的列表 但我无法弄清楚名称和参数的存储位置 我正在寻找一
  • 如何使用 JSCH 连接到 SSH 服务器?

    我正在尝试使用 jsch 连接到我的开放 ssh ubuntu 服务器 我只是想看看是否可以使用 SSH 从 Android 手机连接到 Linux 服务器 但它不起作用 当我在 Android 手机上启动应用程序时 应用程序崩溃了 我已附
  • 如何更改 zend 框架布局中的元标记

    所以我在layout phtml上设置了一些默认元标记 this gt headTitle and this gt headMeta gt appendName 并在layout phtml的标头处得到回显 我的问题是 如何更改视图文件中的
  • SQL Server 2008 中的 USING 关键字是什么?

    我知道 SQL 子句 USING 的美妙用法 它类似于 NATURAL JOIN 但您必须详细说明连接列 您可以更简单 更快 地连接具有相同键和外键的表 并且查询的输出不包含冗余字段 然而 SQL Server 2008 不支持使用 USI
  • Tab 键在 IWebbrowser2 中不起作用

    我正在使用 ActiveX 控件在 ATL 应用程序 IWebbrowser2 中实现嵌入式浏览器 问题是 我无法使用 Tab 键在文本字段之间跳转 按 T ab 键什么也不做 按 Enter 键将按预期提交表单 问题存在 例如在 Face
  • 选择 XML 中的节点

    我正在尝试在 c 中使用 xpath 选择节点 这是我的 XML 文件
  • Struts2注释验证拦截器

    我在将 struts2 jquery plugin 3 6 0 实现到 Struts2 2 3 14 3 网站中时遇到了令人沮丧的时间 我最近将Struts2版本更新到2 3 14 3及其所有依赖项 并且网站功能完全正常 我现在正在尝试更新
  • 如何获取当前运行的实际窗口的标题?

    我有一个问题 我只需要获取列表中所有窗口的标题 我所说的标题是指 记事本 总指挥官 只是窗口顶部边缘显示的文本 到目前为止我已经到了这里 function EnumWindowProc hHwnd HWND lParam integer b
  • 统计机器翻译的短语提取算法

    我用 SMT 的短语提取算法编写了以下代码 GitHub https github com alvations nltk blob develop nltk align phrase based py coding utf 8 def ph
  • 如何从 Scala-Play 应用程序中的 URL 中提取路由变量的值?

    我正在为 Play 框架编写一个模块 在我的模块的一部分中 我有以下代码 abstract class SecurityFiltering extends GlobalSettings override def onRequestRecei
  • iOS画屏视频采集不流畅

    我正在创建一个应用程序 我们可以在 imageView 中使用手指进行绘图 同时我们也可以记录屏幕 到目前为止我已经完成了这些功能 但问题是一旦视频录制完成 如果我们播放录制的视频 手指在视频中绘图不流畅 我没有使用 opengl 绘图在
  • HTML5 画布和线宽

    我正在画布上绘制折线图 线条画得很好 图表是按比例缩放的 每个部分都被绘制 颜色都可以等等 我唯一的问题是视觉上线宽有所不同 它几乎就像书法笔的笔尖 如果笔画向上 则线条较细 如果笔画水平 则线条较粗 我的线条粗细是恒定的 并且我的stro
  • FCM getToken() 不返回任何内容

    我正在尝试将 Firebase Cloud Messaging 与 Angular2 结合使用 但他们似乎不希望我们这样做 Google 我一直在关注this https firebase google com docs cloud mes
  • iis7 asp.net mvc webapi 重写

    我遇到了与参考帖子中相同的问题 由于 ExtensionlessUrlHandler WebAPI 重写规则失败 https stackoverflow com questions 13885343 rewrite rule for web
  • 在 .NET 程序中将图像加载/创建到 SharpDX 中

    我正在尝试使用 SharpDX 使用 DirectX 创建一个简单的类似迷宫的 2D 程序 为此 我想创建可以在屏幕上渲染墙壁 走廊 迷宫外部等的位图 但是 我似乎不知道如何将现有图像文件加载到 Bitmap 类中SharpDX http
  • Google Page Speed-like 图像优化 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我的网站有大约 2 万张产品图片 Google Page Speed 告诉我它们可以优化 这是正确的
  • 在 R 中使用 git2r::clone 进行 SSH 身份验证时获取“不支持的 URL 协议”

    我正在尝试使用 git2r clone 克隆私人存储库via SSH 不是 HTTPS 协议 在 R 中通过执行 git2r clone email protected cdn cgi l email protection team nam
  • 每个替代 Monad 都可以过滤吗?

    集合的范畴包括笛卡尔幺半群和柯笛卡尔幺半群 下面列出了这两种幺半群结构的规范同构类型 type x y Either x y type x y x y data Iso a b Iso fwd a gt b bwd b gt a easso
  • Spark GraphX 聚合求和

    我正在尝试计算 Spark graphx 图中节点值的总和 简而言之 该图是一棵树 顶部节点 根 应将所有子节点及其子节点相加 我的图实际上是一棵树 看起来像这样预期总和值应为 1850 gt VertexID 14 Value 1000