冲天香阵透长安,满城尽带黄金甲。这篇文章主要讲述干货!!基于Spark Graph的社交关系图谱项目实战相关的知识,希望能为你提供帮助。
大家好,我是老兵。
本文是基于??Spark Graphframes?
?的??社交关系图谱?
?实战演练。
我将结合自身开发和项目经验,分别讲述??社交关系图谱?
?原理、??图计算?
?原理、Spark Graphframes??图计算编程?
?、??关联推荐?
?实战等内容,帮助大家快速了解Spark Graphframes图计算的使用。
有兴趣交流沟通的朋友,欢迎添加我个人微信: youlong525。
1 什么是社交关系图谱社交关系图谱的粗浅理解,即表达社交网络中的人与群体的关系。
1)业务通俗理解
我是谁? 我周围人是谁?我们有什么关系?
比如张三是个资深?
?网络?
?爱好者,也是个??圈内?
?达人。我们先来看看他的圈子:??家庭?
?圈、??同事?
?圈、??朋友?
?圈、??区域?
?圈、??兴趣?
?圈等。。文章图片
这些圈子中的角色对象。有的和张三关系紧密,如?
?亲朋好友?
?;有的毫不相识,即??潜在对象?
?;有的相隔万里却因相同的一个??兴趣?
?结识。。。文章图片
总体而言,这就是张三的社交关系图谱(简略版)。
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 图计算模型
上面我们将关系图谱经过?
?数字化?
?和??标签化?
?处理,抽象成带有??标签?
?的个体属性和关系数据。文章图片
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。
【干货!!基于Spark Graph的社交关系图谱项目实战】1)配置环境
逻辑分析: A-> B and B -> C and A > < C,即A与B双向关系、B与C双向关系,但是A-> C没有关系,输出(A,C)
- 环境中安装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推荐阅读
- 从if...else...到责任链再到composeAOP,顺带把传参解决了~
- 网络协议之:memcached text protocol详解
- Android开发中常见的设计模式——观察者模式
- 利用 Android 系统原生 API 实现分享功能
- Appium公共方法封装
- Android-低功耗蓝牙(BLE)-客户端(主机/中心设备)和服务端(从机/外围设备)
- react webapp 开发小结
- NHibernate 基于 ClassMapping 的ManyToMany(多对多配置)
- Xamarin.Android SharedPreferences的使用方法