Apache GraphAr 0.13.0-incubating 介绍与选型指南

Apache GraphAr 0.13.0-incubating 介绍与选型指南:实查官方文档与发布页,梳理图数据标准文件格式的分块列式模型、多语言库、快速上手与同类选型对比。

Apache GraphArApache GraphAr数据湖2026/10/18

Apache GraphAr 0.13.0-incubating 介绍与选型指南

目标:以官方渠道实查的 Apache GraphAr(孵化中)0.13.0 版本为基准,讲清这一图数据标准文件格式的定位、格式模型、多语言库与同类差异,帮助读者判断在数据湖与图生态之间是否需要引入 GraphAr。本文为认知篇,全部信息基于官网、官方文档与 GitHub Releases 联网查证(查询日期 2026-10-18),不含本地安装实测。

一、信息基准

1.1 查询日期与版本依据

项目内容
查询日期2026-10-18
本文介绍版本0.13.0(官方最新发布版;项目处于 Apache 孵化器,版本标识为 0.13.0-incubating)
版本发布日期2025-08-29(官方下载页 Releases 表格)
版本依据官方下载页 https://graphar.apache.org/download 列出最新源码发布 apache-graphar-0.13.0-incubating-src.tar.gz(仅源码发布);GitHub Releases 最新标签 v0.13.0

1.2 官方来源清单

来源链接
官网https://graphar.apache.org/
官方下载页https://graphar.apache.org/download
文档总览https://graphar.apache.org/docs/
C++ 库入门(含格式示例)https://graphar.apache.org/docs/libraries/cpp/getting-started
GitHub 仓库https://github.com/apache/incubator-graphar
v0.13.0 发布说明https://github.com/apache/incubator-graphar/releases/tag/v0.13.0
孵化状态声明官网页脚 ASF Incubator 声明

二、软件概述

Apache GraphAr(曾名 Gar)0.13.0-incubating 是一个开源、标准化的图数据文件格式(open source, standard data file format for graph data storage and retrieval),用于图数据的存储与检索(来源:官网首页,查询日期 2026-10-18)。它的本质是「格式的规范 + 读写库」,而非图数据库或图计算引擎:GraphAr 定义了如何在文件系统/对象存储上以分块(chunking)、列式存储组织属性图(顶点、边、属性),并保持 CSR/CSC 邻接表语义,让同一份图数据可以被多个引擎按需读取,也支持大图在内存之外(out-of-core)存放与查询,例如存放在数据湖中。

官方列出三大设计要点(来源:官网首页):高效的格式设计(分块、列式、CSR/CSC 语义);支持 out-of-core 查询(大规模图在内存外存储与查询,如数据湖场景);跨语言支持(C++、Java、Scala(Spark)、Python(PySpark)库用于生成、访问与转换 GraphAr 文件)。

项目目前处于 Apache 孵化器(官网页脚声明:Apache GraphAr is an effort undergoing incubation at The Apache Software Foundation),代码以 Apache License 2.0 许可发布。0.13.0 为源码发布,无官方预编译二进制。

三、核心概念与格式模型

3.1 信息文件(YAML)

GraphAr 用一组 YAML 文件保存图的元信息,数据本体为列式数据文件(来源:官方 C++ 库入门文档,查询日期 2026-10-18):

信息文件内容
图信息文件图名、数据文件根目录路径(prefix)、所含顶点/边信息文件清单、GraphAr 格式版本(如 gar/v1)
顶点信息文件单一顶点标签一组的定义:顶点 chunk 大小、数据文件相对路径前缀、属性划分成的属性组(property groups,每组指定文件类型与路径前缀、属性名/类型/是否主键)、格式版本
边信息文件边的顶点类型对、边 chunk 大小、邻接表类型(CSR/CSC/COO)、边属性组等

3.2 分块与列式存储

  • chunking:顶点与边都按固定 chunk 大小切分(顶点信息文件中指定 chunk size),每个 chunk 对应一个或一组数据文件,便于并行读取与按需扫描。
  • property groups:属性按组拆分,每组独立指定文件类型(CSV、ORC 或 Parquet)与文件路径前缀,读取时可以只加载需要的属性组,减少 IO。
  • CSR/CSC 语义:边数据按 CSR(行压缩)/CSC(列压缩)邻接表语义组织,配套 offset 文件,服务图遍历类访问模式。

3.3 版本与多语言库

  • 格式版本以 gar/v1 等标识写在信息文件中,向前演进有明确协议。
  • 官方库覆盖 C++(含 Arrow 依赖,ORC 扩展在 0.13.0 中改为可选)、Java、Spark(Scala)、PySpark(Python);0.13.0 起 Java 库移除了对 Hadoop 的依赖(v0.13.0 发布说明 feat(java) 条目)。
  • 0.13.0 新增以 protobuf 定义 GraphAr 格式协议、支持 JSON payload 文件格式(C++/Spark),并加入生成 Go proto 的配置(v0.13.0 发布说明)。

四、功能特性

基于官网与 v0.13.0 发布说明归纳(查询日期 2026-10-18):

  • 标准化图存储:把属性图以开放文件格式落盘,任何实现了规范的引擎都能读写,避免图数据锁定在单一系统内。
  • 数据湖友好:数据文件即普通列式文件(Parquet/ORC/CSV/JSON),可与数据湖表共存,支持 out-of-core 大图场景。
  • 多文件格式:每属性组可选 CSV/ORC/Parquet,0.13.0 增加 JSON payload 支持。
  • 多语言生态:C++/Java/Spark/PySpark 四类库,覆盖从 Spark 图处理(GraphX/GraphAr Spark 工具)到本地程序读取的链路。
  • 易与图计算/图查询系统集成:官方定位是存储检索格式,可作为图数据库、图分析引擎之间的交换与落地方。
  • 孵化期活跃迭代:0.12.0(2024-07-02)到 0.13.0(2025-08-29)完成 C++ 代码结构重构、Java 去除 Hadoop 依赖、protobuf 协议化等多项升级(两版发布说明)。

五、快速上手

以下内容引自官方文档(查询日期 2026-10-18),本文未做本地实测。

1. 理解信息文件。官方 C++ 入门(https://graphar.apache.org/docs/libraries/cpp/getting-started )以 ldbc_sample 示例图给出图信息文件原文:

name: ldbc_sample

prefix: ./

vertices:
  - person.vertex.yml

edges:
  - person_knows_person.edge.yml

version: gar/v1

该示例图包含一类顶点 person 与一类边 person_knows_person;person 顶点文件中定义两个属性组:第一组仅含 id(主键),第二组含 firstName、lastName 等属性(每组可分别指定 CSV/ORC/Parquet 文件类型)。

2. 构建与读写。官方文档指向 GitHub 仓库 README 的「Building Libraries」步骤安装 GraphAr C++ 库,随后用信息文件构造 GraphInfo,再通过顶点/边读写器以 chunk 为单位读写数据文件;Spark/PySpark 用户使用 GraphAr Spark 包(来源:官方文档 Libraries 分类与仓库 README)。

💡 说明:0.13.0 为源码发布,各语言库需自行从源码构建,构建依赖与步骤以仓库 README 为准。

六、适用场景与限制

6.1 适用场景

  • 数据湖上图数据落地:把社交网络、风控关系图等以标准列式格式存于数据湖,供多个引擎消费。
  • 图数据在系统间交换:在图数据库导出、图分析框架输入之间提供中立格式,替代私有序列化。
  • 大图 out-of-core 分析:图规模超出内存时,用分块列式文件配合 Spark 等引擎分批处理。
  • 图与表联合分析:图数据以 Parquet/ORC 形式与常规数仓表共用存储与计算栈。

6.2 限制与风险

  • 孵化期项目:官网明确声明孵化状态(not necessarily a reflection of completeness...),API 与格式演进仍在进行,生产引入需评估治理风险。
  • 仅源码发布:官方只发布源码包,二进制依赖自建,0.13.0 发布于 2025-08-29,节奏以社区驱动。
  • 不是引擎:GraphAr 不提供图查询/索引/事务能力,需要查询能力仍需图数据库。
  • 库成熟度不均:C++ 与 Spark 库文档与用例相对完善,Java/PySpark 能力以官方文档「Implementation status」描述为准(来源:官方文档站结构)。

七、同类选型对比

按「图数据存储/交换格式」同类族对比:Neo4j 导出格式(图数据库自带的 GraphML/APOC 导出链路)、GraphML(通用 XML 图交换格式规范)、Apache Arrow(列式内存格式基座,图格式常用其作为底层)。社区数据来源:GitHub 仓库页面 stargazerCount 实查与 GitHub Releases(查询日期 2026-10-18)。

维度Apache GraphAr 0.13.0Neo4j 导出格式GraphMLApache Arrow
许可Apache-2.0Neo4j 社区版 GPLv3 / 企业版商业许可(导出工具随产品)开放规范(GraphML WG,2001 年提出,无单一官方仓库)Apache-2.0
GitHub stars377(apache/incubator-graphar,2026-10-18)17337(neo4j/neo4j,2026-10-18)不适用(规范)17210(apache/arrow,2026-10-18)
最近发版v0.13.0(2025-08-29)5.26 LTS 线(neo4j/neo4j 最新 tag v5.26.32,2026-10-18 查询)规范无发版概念apache-arrow-26.0.0(GitHub Releases,2026-10-18 查询)
版本节奏孵化期一年左右一个 minor数据库版本高频滚动,LTS 线并行静态规范高频(一年数个 major)
兼容矩阵C++/Java/Spark/PySpark,Parquet/ORC/CSV/JSON 文件随 Neo4j 产品与 APOC 插件XML 生态通用,多数图工具可导入内存列式标准,C/GLib/C++/Java/Python/Rust 等全语言
定位属性图标准文件格式(chunk + 列式 + CSR/CSC)图数据库自带导入导出通用图交换 XML 格式通用列式内存/交换格式(非图专用)

选型建议:要把图数据长期放进数据湖、在 Spark 生态与自研服务间共享,GraphAr 是目前少有的面向属性图 + 列式文件的开放标准;已有 Neo4j 且只需搬迁数据,直接用其自带导出(GraphML/APOC)最省事;跨任意图工具的轻量交换用 GraphML 即可;若只需列式底座并自行定义图布局,可直接基于 Apache Arrow。

八、参考链接