在之前的文章中,我们介绍了标准化图存储文件格式 GraphAr 的整体概况和快速上手指南。在本文中,我们介绍如何将 GraphAr 作为图数据归档格式,完成 Neo4j 图数据库中数据的导入导出。目前,GraphAr 已在 Github 开源,欢迎大家关注、贡献代码和加星星✨~开源地址:https://github.com/alibaba/GraphAr
什么是 GraphAr
GraphAr(Graph Archive,简称 GAR)为图数据定义了一套标准化的、独立于计算/存储系统的文件格式,并提供了一系列接口用来生成、访问和转换这些格式化的文件。GraphAr 可以帮助各类图计算应用或现有系统方便快捷地构建和访问图数据,它既可以作为图计算应用的直接数据源,也可以服务于图数据的导入/导出和持久化存储,减少各类图系统之间协同工作的开销。
如下图所示,一个典型的 GraphAr 应用场景是将 GraphAr 作为图数据归档格式对接 Neo4j、NebulaGraph 等各种图数据库系统,完成数据的归档落盘,也可用于后续对接其他图计算应用或系统进行分析处理。
GraphAr Spark SDK
在之前的文章中,我们介绍了如何快速上手 GraphAr 的 C++ SDK。在本文的例子中,我们将使用 GraphAr 提供的另一套开发工具,即 GraphAr Spark SDK。Apache Spark 是一个开源的、支持多种编程语言的分布式计算系统,可用来加速大规模数据处理任务。Spark 提供了许多内置的计算框架,如 Spark SQL、Spark Streaming、MLlib 和 GraphX,Spark 还支持在 Hadoop 集群上运行以及与 Hadoop 生态系统中的其他工具和技术集成。
GraphAr 通过提供 Spark SDK 使得用户可以利用 Spark 方便快捷地生成、加载和转换 GraphAr 文件。同时,也支持了 GraphAr 与其他兼容 Spark 的图相关系统如 GraphX、Neo4j 进行集成。
编译安装 GraphAr Spark SDK
编译安装 GraphAr 的 Spark SDK 需要以下依赖:
- Spark 3.2+ (Scala 2.12)
- JDK 8 或更高版本
- Maven 3.2.0 或更高版本
在本地搭建环境,从 GraphAr 源码编译安装 Spark SDK 可参考如下步骤:
# download code
$ git clone https://github.com/alibaba/GraphAr.git
$ cd GraphAr
$ git submodule update --init
$ cd spark
# build
$ mvn clean package -DskipTests
更详细的编译安装步骤请查阅 GraphAr Spark SDK 安装文档。
使用 GraphAr Spark SDK
GraphAr Spark SDK 提供了生成、加载和转换 GraphAr 文件的相关方法。它由几个主要部分组成:
- Info Classes 用于构建和访问 GraphAr 中图、点和边的元信息。
- IndexGenerator 帮助生成 Spark DataFrame 中点/边的 index。
- Writer 提供了一组接口,可用于将 Spark DataFrame 写出到 GraphAr 格式文件。
- Reader 提供了一组接口,可用于读取 GraphAr 文件,并返回 Spark DataFrame。
- Graph-level helpers 提供了一组更高级的API,支持图级别的读取、写入和转换数据等操作。对比直接使用 Reader、Writer、IndexGenerator和 Infor Classes 等底层 API 的方法,这些更高层次抽象的工具类使得用户对 GraphAr 的操作更加简单,从而提高了 GraphAr Spark SDK 的易用性。
想了解 GraphAr Spark SDK 更详细的使用方法、API 介绍和使用范例,请查阅 GraphAr Spark SDK 文档。
Neo4j 数据导入导出
Neo4j 图数据库提供了用于与 Spark 集成的工具 Neo4j Spark Connector。 通过 Neo4j Spark Connector 与 GraphAr Spark SDK 的结合使用,我们便可以完成 Neo4j 和 GraphAr 之间的数据迁移,从而实现将 GraphAr 作为图数据库的持久化磁盘存档格式。
定义元信息
我们提供了两个简单的示例程序,以演示如何进行 GraphAr 与 Neo4j 之间的数据迁移。示例选用 Neo4j 的内置数据集之一 Movie Graph,并选择 “Person” 和 “Movie” 类型的点,以及 “Person PRODUCED Movie” 类型的边作为用户需要存档的子图。有关子图、点、边在 GraphAr 中的元信息定义可以参考我们提供