GraphFrames简介
Databricks公司宣布推出了Apache Spark上的图处理GraphFrames库,通过和UCB和MIT合作,他们基于DataFrames构建了一个图处理库,GraphFrames受益于DataFrames的高性能和可拓展性,也能提供一个统一的图处理API接口。支持的语言包括Scala、Java、Python。
什么是GraphFrames
GraphFrame支持通用的图处理,和Apache Spark的GraphX库很像,除此之外,GraphFrames基于Spark DataFrames构建,从而有以下几个优点。
- Python,Java和Scala API:GraphFrames为三种语言提供了通用的API接口。首次实现了所有在GraphX中实现的算法都能在python和Java中使用。
- 强力的查询:GraphFrames允许用于使用简短的查询,就像和Spark SQL和DataFrame中强力的查询语句一样。
- 保存和载入图模型:GraphFrames完全支持DataFrame结构的数据源,允许使用熟悉的Parquet、JSON、和CSV读写图。
一个社交网络的例子
假设我们有一个社交网络,用户之间有相互联系,我们通过有顶点集合(用户)和边的集合(用户之间的关系)的图来展示网络,下面是一个简单的例子。
我们可能会问问题诸如“哪个用户最有影响力?”或者“用户A和用户B相互不认识,是否应该介绍他们相互认识?”这种类型的问题能通过图查询和算法来回答。GraphFrames能存储节点和边的数据,在社交网络中,每个用户能存储年龄和姓名,并且每个连接都有关系的类型。
简单的图查询非常容易。GraphFrames使得通过图查询语句很容易表达。由于GraphFrames节点和边存储在DataFrames中,查询语句就是DataFrames(或者SQL)的查询。
- 比如查询:查询社交网络中多少用户年龄 超过35岁?我们可以使用下面的语句查询节点。g.vertices.filter(“age>35”)
- 查询多少用户至少有两个粉丝?我们也可以使用内置的inDegrees方法处理DataFrame的查询。g.inDegrees.filter(“inDegree>=2”)
图算法支持复杂的工作流
GraphFrame支持所有在GraphX中实现的算法。包括三种语言实现的API,图算法实现的结果可以是DataFrames或者GraphFrames,比如查询谁是最有影响力的用户时,我们可以使用PageRank进行查询。
results=g.pagerank(resetProbability=0.15,maxIter=10)
displya(results.vertices)
GraphFrames也支持很多新的算法:
- 宽度优先算法(BFS):查找节点之间的最短路径。
- Motif查找:在图中找到结构化的模式。
Motif查找能提供强力的查询,比如推荐感兴趣的人时,我们可能去搜索三个用户A、B、C,在这个关系中A关注了B、B关注了C但是A没有关注C。
# Motif: A->B->C but not A->C
results = g.find("(A)-[]->(B); (B)-[]->(C); !(A)-[]->(C)")
# Filter out loops (with DataFrame operation)
results = results.filter("A.id != C.id")
# Select recommendations for A to follow C results = results.select("A", "C") display(results)
所有的GraphX算法集合中被GraphFrame支持有:
- PageRank:发现最图中重要的节点。
- 最短路径:查找每个节点到目标节点的最短路径。
- 连通分支:一组节点形成联通子图。
- 三角计数:计算每个节点都是三角形的一部分的总节点数。
- 标签传播算法:检测图中的社区。
GraphFrames和GraphX集成
GraphFrames和GraphX通过两种展示相互转化,而不带来信息丢失。我们我们可以使用下面的代码将GraphFrame转化为GraphX,并转化回来。
val gx:Graph[Row,Row]=g.toGraphX()
val g2:GraphFrame=GraphFrame.fromGraphX(gx)
本文属于译文,原文出处。更多的GraphFrame的API文档。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Hadoop2.7实战v1.0之动态删除DataNode(含NodeManager)节点(修改dfs.replication)
动态删除DataNode(含NodeManager)节点(修改dfs.replication)【终极版】 1.ActiveNameNode修改hdfs-site.xml文件 点击(此处)折叠或打开 [root@sht-sgmhadoopnn-01 hadoop]# vi hdfs-site.xml <!--动态许可datanode连接namenode列表--> <property> <name>dfs.hosts</name> <value>/hadoop/hadoop-2.7.2/etc/hadoop/include_datanode</value> </property> <!--动态拒绝datanode连接namenode列表 --> <property> <name>dfs.hosts.exclude</name> <value>/hadoop/hadoop-2.7.2/etc/hadoop/exclude_datanode</v...
- 下一篇
SparkContext的初始化(仲篇)——SparkUI、环境变量及调度
《深入理解Spark:核心思想与源码分析》一书前言的内容请看链接《深入理解SPARK:核心思想与源码分析》一书正式出版上市 《深入理解Spark:核心思想与源码分析》一书第一章的内容请看链接《第1章 环境准备》 《深入理解Spark:核心思想与源码分析》一书第二章的内容请看链接《第2章 SPARK设计理念与基本架构》 由于本书的第3章内容较多,所以打算分别开辟四篇随笔分别展现。 《深入理解Spark:核心思想与源码分析》一书第三章第一部分的内容请看链接《深入理解Spark:核心思想与源码分析》——SparkContext的初始化(伯篇)》 本文展现第3章第二部分的内容: 3.4 SparkUI详解 任何系统都需要提供监控功能,用浏览器能访问具有样式及布局,并提供丰富监控数据的页面无疑是一种简单、高效的方式。SparkUI就是这样的服务,它的构成如图3-1所示。 在大型分布式系统中,采用事件监听机制是最常见的。为什么要使用事件监听机制?假如SparkUI采用Scala的函数调用方式,那么随着整个集群规模的增加,对函数的调用会越来越多,最终会受到Driver所在JVM的线程数量限制而影响监...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装