首页 > 其他 > 详细

Spark GraphX

时间:2020-10-11 21:01:23      阅读:33      评论:0      收藏:0      [点我收藏+]

一、图的概念

  图是由顶点集合(vertex)以及顶点间的关系集合——边(edge)组成的一种网状数据结构,通常表示为二元组:Graph=(V,E)

  图按方向可分为有向图和无向图(spak通常为有向图)

  度:一个顶点所有边的数量

    出度:指从当前顶点指向其他顶点的边的数量

    入度:其他顶点指向当前顶点的边的数量

二、GraphX API

  graph的创建

class Graph[VD, ED] {
  val vertices: VertexRDD[VD]
  val edges: EdgeRDD[ED]
  val triplets: RDD[EdgeTriplet[VD, ED]]
}

三、例子

关系如图:

技术分享图片

 val spark=SparkSession.builder().master("local[*]").appName("job").getOrCreate()
    val sc = spark.sparkContext
    //创建所有点
    val points = Seq((1L, ("Alice", 28)), (2L, ("Bob", 27)), (3L, ("Charlie", 65)),
      (4L, ("Doinb", 42)), (5L, ("Ed", 55)), (6L, ("Faker", 50)))
    //创建所有的边
    val eds = Seq(Edge(2L,1L,7),Edge(2L,4L,2),Edge(4L,1L,1),Edge(5L,2L,2),Edge(5L,3L,8),
      Edge(5L,6L,3),Edge(3L,2L,4),Edge(3L,6L,3))
    val vertices=sc.makeRDD(points)
    val edges=sc.makeRDD(eds)
    val graph=Graph(vertices,edges) //spark graph创建成功

图的信息

//查看图的信息  numVertices总点数  numEdges总边数   degrees度数   inDegrees入度   outDegrees出度
    println(graph.numVertices,graph.numEdges,graph.degrees,graph.inDegrees,graph.outDegrees)

//attr权重 src:srcId/srcAttr 起点信息  dst:dstId/dstAttr 终点信息
    graph.triplets.filter(_.attr>=5).foreach(p=>println(p.srcAttr._1,p.dstAttr._1))

对图的修改操作

 //reverse图的颠倒
    val graph=Graph(vertices,edges).reverse

//joinVertices  outerJoinVertices 对点进行操作
    graph.joinVertices(newPoints)((id,old,newval)=>(old._1+"@"+newval,old._2)).vertices.foreach(println)
    graph.outerJoinVertices(newPoints)((id,old,newval)=>(old._1+"@"+newval.getOrElse("xxx.com"),old._2)).vertices.foreach(println)

//mapEdges 对边的操作 attr改动权重
graph.mapEdges(m=>m.attr+2).triplets.filter(p=>p.attr>=5).foreach(p=>println(p.srcAttr._1,p.dstAttr._1))

 

Spark GraphX

原文:https://www.cnblogs.com/afeiiii/p/13798828.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!