基于 Spark DataFrame 的图数据库 GraphFrame:用 Spark SQL 查询 Graph

  • 侠天

2016 年 3 月 9 日

话题:语言 & 开发架构

GraphFrame 发布

GraphFrame 基于 Spark SQL 的 DataFrame,继承了 DataFrame 扩展性和高性能。并且可以提供支持 Scala、Java 和 Python 等语言的统一 API。

什么是 GraphFrame

GraphFrame 是类似于 Spark 的 GraphX 库,支持图处理。但 GraphFrame 建立在 Spark DataFrame 之上,具有以下重要的优势:

支持 Scala ,Java 和 Python API:GraphFrame 提供统一的三种编程语言 APIs,而 GraphX 的所有算法支持 Python 和 Java

方便、简单的图查询:GraphFrame 允许用户使用 Spark SQL 和 DataFrame 的 API 查询

支持导出和导入图:GraphFrame 支持 DataFrame 数据源,使得可以读取和写入多种格式的图,比如,Parquet、JSON 和 CSV 格式。

社交网络的列子

社交网络中的人是以关系来互相连接的,我们能把这个网络看成一幅图,其中人看成顶点,人与人之间的关系看作是边,如图 1 所示:

图 1

在社交网络上,每个人可能由年龄和名字,每个人之间的关系也有不同类型。如表 1 和表 2

表 1

表 2

图查询示列

由于 GraphFrame 的顶点和边存储为 DataFrame,可以用 DataFrame 或 SQL 来很简单的查询图。

比如,查询有多少年龄大于 35 的人?

g.vertices.filtr(“age > 35”)

比如,有多少人至少被 2 个人关注?

g.inDegrees.filter(“inDegree >=2”)

GraphFrames 支持所有 GraphX 的算法,包括 PageRank、Shortest Paths、Connected components、Strongly Connected components、Triangle count 和 Label Propagation Algorithm(LPA)

GraphFrame 和 GraphX 之间可以无损的来回转换。

val gx: Graph[Row, Row] = g.toGraphX() 
val g2: GraphFrame = GraphFrame.fromGraphX(gx) 

更相信的 GraphFrame API 文档见这里


感谢杜小芳对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群(已满),InfoQ 读者交流群(#2))。

语言 & 开发架构