干货!!基于Spark Graph的社交关系图谱项目实战

冲天香阵透长安,满城尽带黄金甲。这篇文章主要讲述干货!!基于Spark Graph的社交关系图谱项目实战相关的知识,希望能为你提供帮助。
大家好,我是老兵。
本文是基于??Spark Graphframes??的??社交关系图谱??实战演练。
我将结合自身开发和项目经验,分别讲述??社交关系图谱??原理、??图计算??原理、Spark Graphframes??图计算编程??、??关联推荐??实战等内容,帮助大家快速了解Spark Graphframes图计算的使用。
有兴趣交流沟通的朋友,欢迎添加我个人微信: youlong525。
1 什么是社交关系图谱社交关系图谱的粗浅理解,即表达社交网络中的人与群体的关系。



我是谁? 我周围人是谁?我们有什么关系?


1)业务通俗理解
比如张三是个资深??网络??爱好者,也是个??圈内??达人。我们先来看看他的圈子:??家庭??圈、??同事??圈、??朋友??圈、??区域??圈、??兴趣??圈等。。
干货!!基于Spark Graph的社交关系图谱项目实战

文章图片

这些圈子中的角色对象。有的和张三关系紧密,如??亲朋好友??;有的毫不相识,即??潜在对象??;有的相隔万里却因相同的一个??兴趣??结识。。。
干货!!基于Spark Graph的社交关系图谱项目实战

文章图片

总体而言,这就是张三的社交关系图谱(简略版)。


个体属性 + 群体关系 => 关系图谱


2)数据层面理解
在理解社交关系图谱的业务含义后,我们去看看数据层面的含义。
??群体关系??和??个体属性??,从数据角度可抽象成包含多维度的数据标签。
类似: ??张三??(name/age/sex)、??朋友??(friend/non-friend..)、??同事??(superior、colleague...)、??区域??(nearby、non-nearby)等。
最终提炼成丰富的标签化的用户社交数据。
关系
标签值
朋友
0(friend)、1(non-friend) ...
同事
0(superior)、1(colleague) ...
亲戚
0(parent)、1(non-parent) ...
区域
0(nearby)、1(non-nearby)...
大多数公司的??社交关系图谱??建设,一般会基于企业内??人与人??的关系数据梳理,通过对数据的??类型??、??可信强度??,不同??来源??的分析,构建统一的丰富的??社交数据体系??,形成关系??知识图谱??。
2 社交关系图谱与图计算2.1 图计算模型
上面我们将关系图谱经过??数字化??和??标签化??处理,抽象成带有??标签??的个体属性和关系数据。
干货!!基于Spark Graph的社交关系图谱项目实战

文章图片
3.1 Spark graphframes基本语法
GraphX中常用算法在GraphFrame的调用方法:
1) 创建图对象(示例)
// 定义顶点
vertices = spark.createDataFrame(
[("a", "Alice", 34), ("b", "Bob", 36)], \\
["id", "name", "age"])

// 定义边
edges = spark.createDataFrame(
[("a", "b", "friend")] , ["src", "dst", "relationship"])

// 创建图对象
graph = GraphFrame(vertices,edges)

2)获取边、角、出入度(示例)
// 计算顶点/边
graph.vertices.show()
graph.edges.show()

// 计算顶点度、出入度
graph.degrees.show()
graph.inDegrees.show()
graph.outDegrees.show()

3)依据点、边、出入度的子图筛选
graph.vertices().filter("age > 30").show()
graph.edges.filter("type == friends").show()
graph.inDegrees.filter("inDegree > = 2").show()

4)模式发现(示例)
// 获取a-> b的关系
motifs = graph.find("(a)-[e]-> (b)")
motifs.show()

5)基本算法(示例)
// PageRank算法
graph.pageRank().maxIter() \\
.resetProbability().run() \\
.vertices().show()

// 广度优先算法
paths = graph.bfs("name=Alice", "age > 34")
paths.show()

// 最短路径
graph.shortestPaths(landmarks=lm).show()

// 标签传播算法
graph.labelPropagation().show()

3.2 Spark Graphframes 实战—基于社交关系推荐好友
回到本文的核心,我们将??关系图谱数据??处理成??图??结构,且选择??Spark Graphframes??作为技术组件,下面开始实战演练。


场景分析: 社交网络中,平台会推荐你关注人的喜爱物品,同时也会推荐关注人好友列表给你。


类似于物以类聚、人以群分的道理,有相同爱好、相同圈子的人可能是你感兴趣的人。
这里举个例子:假如userA是zhangsan的朋友,userB是userA的朋友且不是zhangsan的朋友;userB和zhangsan有相同兴趣,则将userB推荐给zhangsan。



逻辑分析: A-> B and B -> C and A > < C,即A与B双向关系、B与C双向关系,但是A-> C没有关系,输出(A,C)


【干货!!基于Spark Graph的社交关系图谱项目实战】1)配置环境
  • 环境中安装graphframes-xx.jar包,并指向安装位置
  • 代码中引入graphframes依赖
from pyspark.sql import SparkSession
from pyspark import SparkContext
from graphframes import *
from pyspark.sql.functions import *

// 定义SparkContext
conf = SparkConf().set("", "")

// 添加graphframes-xx.jar依赖包
spark = SparkSession \\
.builder

    推荐阅读