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)
)。
评论