基于Spark GraphX 的图形数据分析

为什么需要图计算

  • 许多大数据以大规模图或网络的形式呈现- 许多非图结构的大数据,常会被转换为图模型进行分析- 图数据结构很好地表达了数据之间的关联性

一.图(Graph)的基本概念

图是由顶点集合(vertex)及顶点间的关系集合(边edge)组成的一种网状数据结构

  • 通常表示为二元组:Gragh=(V,E)- 可以对事物之间的关系建模
    应用场景
  • 在地图应用中寻找最短路径- 社交网络关系- 网页间超链接关系
    图的术语
  • 顶点(Vertex)- 边(Edge)
Graph=(V,E)
集合V={<!-- -->v1,v2,v3}
集合E={<!-- -->(v1,v2),(v1,v3),(v2,v3)}

在这里插入图片描述 - 有向图 ``` G=(V,E) V={ A,B,C,D,E} E={ <A,B>,<B,C>,<B,D>,<C,E>,<D,A>,<E,D>} 在这里插入图片描述 - 无向图 ``` G=(V,E) V={ A,B,C,D,E} E={ (A,B),(A,D),(B,C),(B,D),(C,E),(D,E)} 在这里插入图片描述 - 有环图:包含一系列顶点连接的回路(环路) 在这里插入图片描述 - 无环图:DAG即为有向无环图 在这里插入图片描述 **度:一个顶点所有边的数量** - 出度:指从当前顶点指向其他顶点的边的数量 - 入度:其他顶点指向当前顶点的边的数量 在这里插入图片描述 - 图的经典表示法:邻接矩阵 在这里插入图片描述
1、对于每条边,矩阵中相应单元格值为1
2、对于每个循环,矩阵中相应单元格值为2,方便在行或列上求得顶点度数

二.Spark GraphX 简介

GraphX是Spark提供分布式图计算API GraphX特点

  • 基于内存实现了数据的复用与快速读取- 通过弹性分布式属性图(Property Graph)统一了图视图与表视图- 与Spark Streaming、Spark SQL和Spark MLlib等无缝衔接
    GraphX核心抽象
  • 弹性分布式属性图(Resilient Distributed Property Graph) - 顶点和边都带属性的有向多重图 在这里插入图片描述 在这里插入图片描述 - 一份物理存储,两种视图 在这里插入图片描述
对Graph视图的所有操作,最终都会转换成其关联的Table视图的RDD操作来完成

三.GraphX API

  • Graph[VD,ED]- VertexRDD[VD]- EdgeRDD[ED]- EdgeTriplet[VD,ED]- Edge:样例类- VertexId:Long的别名
class Graph[VD, ED] {<!-- -->
  val vertices: VertexRDD[VD]
  val edges: EdgeRDD[ED]
  val triplets: RDD[EdgeTriplet[VD, ED]]
}

import org.apache.spark.graphx._
val vertices:RDD[(VertexId,Int)]=sc.makeRDD(Seq((1L,1),(2L,2),(3L,3)))
val edges=sc.makeRDD(Seq(Edge(1L,2L,1),Edge(2L,3L,2)))
val graph=Graph(vertices,edges)  //Graph[Int,Int] ?

import org.apache.spark.graphx.GraphLoader
//加载边列表文件创建图,文件每行描述一条边,格式:srcId dstId。顶点与边的属性均为1
val graph = GraphLoader.edgeListFile(sc, 
                                        "file:///opt/spark/data/graphx/followers.txt")


1.属性图应用示例-1

在这里插入图片描述 构建用户合作关系属性图

  • 顶点属性:用户名.职业- 边属性:合作关系
val userGraph: Graph[(String, String), String]

2.属性图应用示例-2

在这里插入图片描述 构建用户社交网络关系

  • 顶点:用户名、年龄-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值