Spark Graph定义
object SparkGraph {
def main(args: Array[String]): Unit = {
val spark: SparkSession = SparkSession.builder().master("local").appName("Graph").getOrCreate()
val sc: SparkContext = spark.sparkContext
val rddVertice: RDD[(Long, String)] = sc.makeRDD(Seq((1L,"A"),(2L,"B"),(3L,"C")))
val rddEdge: RDD[Edge[String]] = sc.makeRDD(Seq(Edge(1L,2L,"aaa"),Edge(2L,3L,"bbb")))
val graph1 = Graph(rddVertice,rddEdge)
}
((1,A),(2,B),aaa)
((2,B),(3,C),bbb)
常用函数
println("__________verices_______________")
graph1.vertices.foreach(println)
println("__________edge_______________")
graph1.edges.foreach(println)
println("__________triplets_______________")
graph1.triplets.foreach(println)
println("__________filter_______________")
graph1.edges.filter(x=>x.attr.equals("aaa")).foreach(println)
println("____________numEdge__________________")
println(graph1.numEdges)
println("______________vertices______________")
println(graph1.numVertices)
println("______________inDegrees__________________")
graph1.inDegrees.foreach(println)
println("_______________outDegrees_________________")
graph1.outDegrees.foreach(println)
println("______________degrees_____________")
graph1.degrees.foreach(println)
println("_________________mapVertices_______________________")
graph1.mapVertices((x,y)=>(y+"x")).vertices.foreach(println)
graph1.mapVertices((x,y)=>(x+1,y+"x")).vertices.foreach(println)
println("_______________mapEdge_________________________")
graph1.mapEdges(x=>x.srcId+"/"+x.dstId+"/"+x.attr).edges.foreach(println)
println("________________reverse_______________________")
graph1.reverse.triplets.foreach(println)
println("_______________subgraph____________________")
graph1.subgraph(x=>x.attr.equals("aaa")).triplets.foreach(println)
println("_______________joinVertice____________________")
val rddVertice2: RDD[(VertexId, PartitionID)] = sc.makeRDD(Array((1L,1),(2L,2),(3L,3),(4L,4)))
graph1.joinVertices(rddVertice2)((id,v1,v2)=>(v1+v2)).vertices.foreach(println)
println("________________outerJoinVertice___________________________")
case class User(x:String,inDeg:Int,outDeg:Int)
graph1.outerJoinVertices(graph1.inDegrees){ case(key,value,inDeg)=>User(value,inDeg.getOrElse(0),0)}
.outerJoinVertices(graph1.outDegrees){case(key,value,outDeg)=>User(value.x,value.inDeg,outDeg.getOrElse(0))}.vertices.foreach(println)
}