【Spark】(十五)基于Spark GraphX的图形数据分析

本文介绍了Spark的GraphX模块,它提供了一个用于分布式图计算的API。GraphX基于弹性分布式属性图,允许对图视图和表视图进行操作,并与其他Spark组件如SQL和MLlib无缝集成。内容涵盖了图的基本概念、术语、经典表示法,以及GraphX的API,包括顶点、边、图的算子和属性图的应用实例。通过实例展示了如何构建和分析用户关系图,如合作关系和社交网络,以及如何使用图的算子进行数据操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么需要图计算

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

图(Graph)的基本概念

  • 1、图是由顶点集合(Vertex)及顶点间的关系集合(边edge)组成的一种网状数据结构
    通常表示为二元组:Graph=(V,E)
    可以对事物之间的关系建模
  • 2、应用场景:
    在地图应用中寻找最短路径
    社交网络关系
    网页间超链接关系

图的术语

1、顶点(Vertex)
2、边(Edge)

在这里插入图片描述
在这里插入图片描述
3、有向图
在这里插入图片描述
在这里插入图片描述

4、无向图
在这里插入图片描述
在这里插入图片描述
5、有环图
包含一系列顶点连接的回路(环路)
在这里插入图片描述
6、无环图
DAG即为有向无环图
在这里插入图片描述

7、度:一个顶点所有边的数量
出度:指从当前顶点指向其他顶点的边的数量
入度:其他顶点指向当前顶点的边的数量

图的经典表示法

邻接矩阵

  • 1、对于每条边,矩阵中相应单元格值为1
  • 2、对于每个循环,矩阵中相应单元格值为2,方便在行或列上求得顶点度

在这里插入图片描述

Spark GraphX

一、简介

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

GraphX特点 :

  • 1、基于内存实现了数据的复用与快速读取
  • 2、通过弹性分布式属性图(Property Graph)统一了图视图与表视图
  • 3、与Spark Streaming、Spark SQL和Spark MLlib等无缝衔接

二、GraphX核心抽象

弹性分布式属性图(Resilient Distributed Property Graph)

  • 1、顶点和边都带属性的有向多重图

在这里插入图片描述

  • 2、一份物理存储,两种视图
    在这里插入图片描述
    注:对Graph视图的所有操作,最终都会转换成其关联的Table视图的RDD操作来完成

三、GraphX API

Graph[VD,ED]
VertexRDD[VD]
EdgeRDD[ED]
EdgeTriplet[VD,ED]
Edge:样例类
VertexId:Long的别名

图(graph)函数:

aggregateMessages         getCheckpointFiles   ops                    staticPageRank
cache                     groupEdges           outDegrees             staticParallelPersonalizedPageRank
checkpoint                inDegrees            outerJoinVertices      staticPersonalizedPageRank
collectEdges              isCheckpointed       pageRank               stronglyConnectedComponents
collectNeighborIds        joinVertices         partitionBy            subgraph
collectNeighbors          mapEdges             persist                triangleCount
connectedComponents       mapTriplets          personalizedPageRank   triplets
convertToCanonicalEdges   mapVertices          pickRandomVertex       unpersist
degrees                   mask                 pregel                 unpersistVertices
edges                     numEdges             removeSelfEdges        vertices
filter                    numVertices          reverse

在这里插入图片描述
在这里插入图片描述
案例一:

// 导入Spark Graph包
import org.apache.spark.graphx._
// 创建 vertices 顶点RDD
val vertices = sc.makeRDD(Seq((1L,1),(2L,2),(3L,3)))
// 创建 edges 边RDD 
val edges = sc.makeRDD(Seq(Edge(1L,2L,1),Edge(2L,3L,2)))
// 创建 graph 对象
val graph = Graph(vertices,edges)

在这里插入图片描述

// 获取graph图对象的vertices信息
graph.vertices.collect
// 获取graph图对象的edges信息
graph.edges.collect
// 获取graph图对象的triplets信息
graph.triplets.collect

在这里插入图片描述
案例二:

cd /opt/kb09file/
vi followers.txt
cat followers.txt

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

在这里插入图片描述

四、属性图应用

示例-1
构建用户合作关系属性图

  • 1、顶点属性
    用户名
    职业
  • 2、边属性
    合作关系
    在这里插入图片描述
scala> val users = sc.makeRDD(Array((3L,("rxin","student")),
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值