如何在Spark中获取图形中最大连通组件的大小?

时间:2017-01-05 18:37:01

标签: scala apache-spark spark-graphx

我正在从源节点和目标节点的元组的RDD构建图形,如下所示:

Graph.fromEdgeTuples(rawEdges = edgeList, 1)
  1. 首先,我不太清楚第二个参数是什么。从文档中,

      

    defaultValue用于创建顶点的顶点属性   由边缘引用

    我仍然没有得到它。

  2. 其次,我找不到任何可以计算最大组件大小的东西。在调用foreach方法后,没有map已实施,也未reduceByKeyconnectedComponents或其他任何内容。

1 个答案:

答案 0 :(得分:3)

  1. defaultValue是分配给所有已创建边的属性:

    val graph = Graph.fromEdgeTuples(sc.parallelize(Seq(
      (1, 2), (2, 3), (4, 5))), 1)
    
    graph.edges.map(_.attr).distinct.collect 
    // Array[Int] = Array(1)
    
  2. 提取组件ID并执行一项工作:

    val ids = graph.connectedComponents.vertices map((v: (Long, Long)) => v._2)
    ids.map((_, 1L)).reduceByKey(_ + _)