【问题标题】:subgraphing in a foreach loop in spark and graphx problems在 spark 和 graphx 问题的 foreach 循环中进行子图化
【发布时间】:2015-07-10 10:24:55
【问题描述】:

希望有人能提供帮助。

我正在尝试编写一个程序,该程序需要对连接到 graphx 网络中每个节点的每个边 ID 执行一个函数。

为此,我想遍历每个节点并识别与其连接的所有边,然后我想使用函数遍历每个边。在 foreach 循环中进行任何类型的子图或过滤时,我的问题似乎出现了。

例如下面的代码应该输出连接到节点的每条边的id

graph.vertices.foreach {
  network => 
    val KeyVert = network._1
val EGraph = graph.subgraph(e => e.dstId == KeyVert)
println(KeyVert)
EGraph.edges.foreach(println)
}

但是,只有在添加 collect 函数以从 rdd 收集图形数据时它才会起作用,例如

graph.vertices.collect.foreach {
  network => 
    val KeyVert = network._1
val EGraph = graph.subgraph(e => e.dstId == KeyVert)
println(KeyVert)
EGraph.edges.foreach(println)
}

网络太大,无法收集边缘数据,因此我们将不胜感激。

【问题讨论】:

    标签: scala foreach network-programming apache-spark spark-graphx


    【解决方案1】:

    em...问题是您不了解驱动程序和工作人员...当您调用 collect 函数时,所有数据都收集到驱动程序,然后 foreach 函数看起来运行良好。其实graph.vertices.foreach没有报错吧?因为它真的很好用,只需打印工人日志中的信息。你知道我说什么吗?希望有帮助。

    【讨论】:

      【解决方案2】:
      graph.vertices.map {
        network => 
          val KeyVert = network._1
        val EGraph = graph.subgraph(e => e.dstId == KeyVert)
        println(KeyVert)
        EGraph.edges.map(println)
      }
      

      这可能会解决您的问题。

      【讨论】:

        猜你喜欢
        • 2022-11-28
        • 1970-01-01
        • 1970-01-01
        • 2014-11-10
        • 1970-01-01
        • 2012-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多