加入运算符

时间:2015-04-22 14:34:19

标签: spark-graphx

我很困惑。我试图做一个看起来像一个相当简单的连接操作,但它没有像我期望的那样工作。我有两张图, pGraph cGraph 。每个都是通过读取CSV文件中的条目构建的,并且使用的 id 值是从其中一个属性生成的。 pGraph 包含 p 顶点,这些顶点使用属性完全填充, cGraph 包含类似定义的 c 顶点。在 pGraph 中,使用一致的 id 值在 p 顶点和 c 顶点之间定义边。但是,由于 c 顶点的属性仅在 cGraph 中可用,我想将两个图连接在一起,以便 c 顶点(来自 cGraph )和 p 顶点的属性(来自 pGraph )在连接的结果中定义( xGraph )。

以下是我认为可以实现此目的的代码:

val xGraph = pGraph.joinVertices(cGraph.vertices){ (x,y,z) => z}

最后,通过调试,我发现根本没有调用map函数。也就是说, pGraph cGraph 中显然没有匹配的顶点。如果 id 值相同,我假设会有匹配。但这似乎并非如此。 如果匹配基于Vertex的两个组件(id和属性),那么当然不会匹配,因为在一种情况下属性为null,而在另一种情况下,它是正确的值。

我发现连接操作的例子在 this 输入顶点是相同的意义上是微不足道的,而不是来自不同的图。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

这就是我得到的:

scala> val g1 = Graph.fromEdges[Double,Double](edges,0.0)
scala> val g2 = Graph.fromEdges[Double,Double](edges,2.0)
scala> val g3 = g1.joinVertices(g2.vertices){ (vid,num1,nu2) => 2.0 }
scala> g3.vertices.toArray.foreach(println(_))
(4,2.0)
(1,2.0)
(5,2.0)
(2,2.0)
(3,2.0)

这几乎是我所期待的。

你能分享完全重现所见内容的代码吗?