【问题标题】:What exactly is meant by match in Join operators连接运算符中的匹配究竟是什么意思
【发布时间】:2015-05-03 07:57:45
【问题描述】:

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

这是我认为可以完成此操作的代码:

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

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

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

有什么建议吗?

【问题讨论】:

    标签: spark-graphx


    【解决方案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)
    

    这几乎是我所期望的。

    您能否分享完全重现您所见内容的代码?

    【讨论】:

    • 抱歉——我遇到了另一个错误的微妙问题,我无法正确区分这两个问题。谢谢你的回答。
    猜你喜欢
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    • 2014-10-29
    • 2016-01-27
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多