0、需求:
图的基本操作实现
1、加载依赖包
略
2、代码基本操作
def main(args: Array[String]): Unit = {
//准备环境
val conf: SparkConf = new SparkConf().setAppName("test").setMaster("local[4]")
val sc = new SparkContext(conf)
sc.setLogLevel("WARN")
//读取数据
val vertex: RDD[(VertexId, (String, String))] = sc.parallelize(Array(
(3L, ("rxin", "stu")),
(2L, ("istoic", "prof")),
(5L, ("franklin", "prof")),
(7L, ("jgzal", "postdoc"))))
//准备顶点
//准备边
val edge: RDD[Edge[String]] = sc.parallelize(Array(Edge(3L, 7L, "collab"),
Edge(5L, 3L, "Adavisor"), Edge(2L, 5L, "Collaeage"), Edge(5L, 7L, "PI")))
//构建图
val defaultUser = ("Jack", "Missing")
val graph = Graph(vertex, edge, defaultUser)
//打印图中的边
graph.vertices.foreach(println(_))
graph.edges.foreach(println(_))
val edgesNum: VertexId = graph.numEdges
println("edgesNum:", edgesNum)
//打印图中顶点的个数
val verticesNum: VertexId = graph.numVertices
println("verticesNum:", verticesNum)
//打印构建的图的入度
println("indegree")
graph.inDegrees.foreach(println(_))
//打印构建的图的出度
println("outdegree")
graph.outDegrees.foreach(println(_))
//打印构建的图的度
println("degree")
graph.degrees.foreach(println(_))
graph.mapVertices((VertexId, VD) => VD._1 + "-" + VD._2).vertices.foreach(println(_))
graph.mapEdges(edges => "name" + edges.attr).edges.foreach(println(_))
graph.mapTriplets(edge => "name" + edge.attr).edges.foreach(println(_))
graph.mapTriplets(edge => "name" + edge.attr).vertices.foreach(println(_))
//对图进行翻转
graph.reverse.edges.foreach(println(_))
graph.subgraph(vpred = (VertexId, VD) => VD._2 != "missing").edges.foreach(println(_))
val subgraph: Graph[(String, String), String] = graph.subgraph(vpred = (VertexId, VD) => VD._2 != "missing")
//连通图----强联通图和连通图
println("connetion graph")
val ccgraph: Graph[VertexId, String] = graph.connectedComponents()
ccgraph.edges.foreach(println(_))
println("mask graph")
val mask: Graph[(String, String), String] = subgraph.mask(ccgraph)
mask.edges.foreach(println(_))
mask.vertices.foreach(println(_))
val join = sc.parallelize(Array((3L, "123")))
graph.joinVertices(join)((VertexId, VD, U) => (VD._1,VD._2 + U)).vertices.foreach(println(_))
graph.outerJoinVertices(join)((VertexId, VD, U) => (VD._1,VD._2 + U)).vertices.foreach(println(_))
}
有问题请联系QQ:765120845