0

我很困惑。我正在尝试做一个看起来相当简单的连接操作,但它并没有像我预期的那样工作。我有两个图表,pGraphcGraph。每个都是通过从 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 函数根本没有被调用。也就是说pGraphcGraph中显然没有匹配的顶点。我曾假设如果id值相同,就会有匹配项。但这似乎不是真的。如果匹配基于顶点的两个组件(id 和属性),那么当然不会有匹配,因为在一种情况下,属性为空,而在另一种情况下,它是正确的值。

我发现的连接操作的例子都是微不足道的,因为thisinput顶点是相同的,而不是来自不同的图。

有什么建议么?

4

1 回答 1

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)

这几乎是我所期望的。

你能分享完全重现你所看到的代码吗?

于 2015-05-02T23:57:45.080 回答