如何使用GraphX'获取图形的连接组件列表;s Java API
我是spark和GraphX的新手,我正在尝试了解如何使用GraphX的Java API执行以下操作。我希望生成一个具有以下签名的方法:如何使用GraphX'获取图形的连接组件列表;s Java API,java,apache-spark,spark-graphx,Java,Apache Spark,Spark Graphx,我是spark和GraphX的新手,我正在尝试了解如何使用GraphX的Java API执行以下操作。我希望生成一个具有以下签名的方法: private <List<Graph<VD, ED>> computeConnectedComponents(Graph<VD, ED> graph){} private下面的代码在scala中,但是应该演示这个想法 返回的图形将包含所有顶点,但每个顶点的属性都将替换为一个VertexId(实际上只是一个Long)
private <List<Graph<VD, ED>> computeConnectedComponents(Graph<VD, ED> graph){}
private下面的代码在scala中,但是应该演示这个想法
返回的图形将包含所有顶点,但每个顶点的属性都将替换为一个VertexId(实际上只是一个Long),它可以解释为顶点所属的连接组件的id。它也是属于该连接组件的“最低顶点id”
import org.apache.spark.graphx_
导入org.apache.spark.rdd.rdd
val vertexArray=阵列(
(1L,(“A”,28)),
(2L,(“B”,27)),
(3L,(“C”,65)),
(4L,(“D”,42)),
(5L,(“E”,55)),
(6升,(“F”,50)),
(7L,(“G”,53)),
(8L,(“H”,66))
)
//顶点1-6已连接,7和8已连接。
val edgeArray=阵列(
边缘(2L、1L、7),
边缘(2L、4L、2),
边缘(3L、2L、4),
边缘(3L,6L,3),
边缘(4L、1L、1),
边缘(5L、2L、2),
边缘(5L、3L、8),
边缘(5L,6L,3),
边缘(7L、8L、3)
)
val vertexRDD:RDD[(长,(字符串,Int))]=sc.parallelize(vertexArray)
val-edgeRDD:RDD[Edge[Int]=sc.parallelize(edgerray)
val图形:图形[(字符串,Int),Int]=图形(vertexRDD,edgeRDD)
val cc=graph.connectedComponents().vertices.collectAsMap()
抄送foreach{
案例(vertexId,clusterId)=>
println(s“顶点$vertexId属于簇$clusterId”)
}
输出:
Vertex 8 belongs to cluster 7
Vertex 2 belongs to cluster 1
Vertex 5 belongs to cluster 1
Vertex 4 belongs to cluster 1
Vertex 7 belongs to cluster 7
Vertex 1 belongs to cluster 1
Vertex 3 belongs to cluster 1
Vertex 6 belongs to cluster 1
谢谢,这很有帮助!