尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Apache Arrow 各语言库实现状态全景:数据类型、IPC、Flight 与第三方格式支持矩阵详解
数据工程大数据序列化数据分析【免费下载链接】arrowApache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing项目地址https://gitcode.com/gh_mirrors/arrow13/arrow点击查看免费下载Apache Arrow 是一个面向加速数据交换与内存处理的跨语言工具箱其核心价值在于同一套列式内存格式多种语言一致支持。本文基于仓库文档 docs/source/status.rstImplementation Status展开系统梳理 C、Java、Go、JavaScript、C#、Rust、Julia、Swift、nanoarrow 以及 Python、R、Ruby、C/GLib 等官方库对 Arrow 格式各项能力的实现现状从基础数据类型、嵌套类型、IPC 序列化、Flight RPC / Flight SQL 远程过程调用到 C Data Interface 零拷贝互操作与 Avro/CSV/ORC/Parquet 等第三方格式的读写支持。读完本文你将掌握各语言实现之间的能力差异、格式版本兼容性约定以及在实际选型与跨语言集成时如何利用这张能力矩阵。一、矩阵的前提格式版本与库版本的对应关系理解状态矩阵前必须先明确 Arrow 的版本机制。根据 docs/source/format/Versioning.rst自 1.0.0 起 Apache Arrow 对每次发布同时使用两个版本来描述格式版本Format Version描述 Arrow 列式内存格式本身如 flatbuffers 元数据布局、类型定义的版本库版本Library Version描述某个具体语言实现的发布版本。一个格式版本可以对应多个库版本例如库版本 2.0.0 与 3.0.0 都可能追踪格式版本 1.0.0。1.0.0 之前的版本不提供向前/向后兼容保证而从 1.0.0 起遵循语义化版本Semantic Versioning。格式版本至今没有出过新的大版本而是在 1.0.0 基础上递增了四个小版本格式版本新增能力1.1新增 256 位 Decimal 类型Decimal2561.2新增 MonthDayNano 时间间隔类型1.3新增 Run-End Encoded 布局1.4新增 BinaryView / Utf8View 变长视图布局与关联类型、ListView / LargeListView 布局以及可变数量缓冲区variadic buffers这些新特性在不被使用的前提下与格式 1.0.0 兼容因此所有官方库都遵循格式 1.0.0 或与其兼容的后续小版本。此外状态文档明确指出除非另有说明Python、R、Ruby 与 C/GLib 库跟随 C Arrow 库的实现能力——这是阅读后续矩阵的一个捷径这四门语言及 C/GLib的能力下限由 C 库决定。矩阵本身不罗列全部语言而是以实现本体的官方库为核心覆盖C、Java、Go、JSTypeScript、C#、Rust、Julia、Swift、nanoarrow轻量级 C 实现作为对照Python/R/Ruby/C/GLib 通过跟随关系间接覆盖。二、数据类型支持矩阵状态文档将数据类型分为三张表基础类型primitive、嵌套类型nested与特殊类型special并对每一行标注各库的 ✓支持与空白不支持。这是判断某类型能否在 A、B 两门语言间无缝互换的第一手依据。2.1 基础标量类型数据类型CJavaGoJSC#RustJuliaSwiftnanoarrowNull✓✓✓✓✓✓✓✓Boolean✓✓✓✓✓✓✓✓✓Int8/16/32/64✓✓✓✓✓✓✓✓✓UInt8/16/32/64✓✓✓✓✓✓✓✓✓Float16✓✓ (1)✓✓✓ (2)✓✓✓Float32/64✓✓✓✓✓✓✓✓✓Decimal128✓✓✓✓✓✓✓✓Decimal256✓✓✓✓✓✓✓✓Date32/64✓✓✓✓✓✓✓✓✓Time32/64✓✓✓✓✓✓✓✓✓Timestamp✓✓✓✓✓✓✓✓Duration✓✓✓✓✓✓✓✓Interval✓✓✓✓✓✓✓Fixed Size Binary✓✓✓✓✓✓✓✓Binary✓✓✓✓✓✓✓✓✓Large Binary✓✓✓✓✓✓✓Utf8✓✓✓✓✓✓✓✓✓Large Utf8✓✓✓✓✓✓✓Binary View✓✓✓Large Binary View✓✓Utf8 View✓✓✓Large Utf8 View✓✓表中三个注记Notes需要特别留意Java 不支持与 Float16 之间的类型转换casting——即使能存储 Float16 数组也无法直接安全转换C# 的 Float16 支持仅在面向 .NET 6 时可用即受目标框架版本约束Java 与 Rust 的 Dictionary 类型不支持嵌套字典见下文特殊类型表。观察这张表可以得出几个结论基础类型覆盖面最全的是 C 与 nanoarrow除 Interval 外几乎全绿Swift 缺失较多无 Decimal、Timestamp、Duration、Interval、变长视图、Large 系列等而格式 1.4 引入的 Binary View / Utf8 View / Large 视图系列目前仅 C 与 Go 完整支持C# 支持除 Large 外的视图类型。仓库中这些类型在 C 侧由 cpp/src/arrow/type.h 统一声明例如Decimal128Type、LargeStringType、BinaryViewType等并以Type::type枚举驱动内存布局与 IPC 序列化。2.2 嵌套类型数据类型CJavaGoJSC#RustJuliaSwiftnanoarrowFixed Size List✓✓✓✓✓✓✓✓List✓✓✓✓✓✓✓✓Large List✓✓✓✓✓✓List View✓✓✓Large List View✓✓Struct✓✓✓✓✓✓✓✓Map✓✓✓✓✓✓✓✓Dense Union✓✓✓✓✓✓✓✓Sparse Union✓✓✓✓✓✓✓✓嵌套类型是 Arrow 表达表中表、键值对、变长结构体等复杂列的基础。List View / Large List View 与 Binary View 同属于格式 1.4 引入的视图布局见 docs/source/format/Versioning.rst目前同样只由 C、Go及 C# 的 List View提供实现Swift 对全部嵌套类型均未覆盖。2.3 特殊类型数据类型CJavaGoJSC#RustJuliaSwiftnanoarrowDictionary✓✓ (3)✓✓✓✓ (3)✓✓Extension✓✓✓✓✓✓Run-End Encoded✓✓Dictionary字典编码用于压缩高基数字符串列Java 与 Rust 的注记 (3) 表示不支持嵌套字典即字典值本身不能是字典类型。Extension扩展类型允许在标准类型上附加自定义语义如arrow.fixed_shape_tensorJS、C#、Swift 尚未实现。Run-End Encoded 属格式 1.3 新增布局仅 C 与 Go 支持——这与 C 侧的RunEndEncodedType及 go/arrow 中的对应实现保持一致。2.4 规范扩展类型Canonical Extension Types除通用 Extension 类型外Arrow 还维护一批跨系统统一的规范扩展类型定义见 docs/source/format/CanonicalExtensions.rst。其标准化有明确门槛扩展名必须以arrow.开头、参数与序列化方式必须在提案中说明、且至少提交一个实现非平凡实现建议两个。目前官方列表中的实现情况为规范扩展类型CJavaGoJavaScriptC#RustJuliaSwiftFixed shape tensor✓Variable shape tensor唯一的已标准化条目是Fixed shape tensorarrow.fixed_shape_tensor其存储类型为FixedSizeListlist_size等于张量形状各维度乘积扩展参数包括value_type、shape可选dim_names描述各维度的逻辑名称须与物理行主序布局对应。而 Variable shape tensor 在所有语言中均未实现。这也再次印证了状态文档的价值——它连尚无人实现的能力都如实标注。三、IPC 格式支持矩阵IPCInterprocess Communication是 Arrow 的序列化与进程间通信协议分为流格式stream format可无限追加 batch 的消息流与文件格式file format带 magic number 与 footer 的可随机访问文件协议细节见 docs/source/format/Columnar.rst 中的 Serialization 章节及 format/Message.fbs、format/File.fbs 等 Flatbuffers 定义。IPC 功能CJavaGoJSC#RustJuliaSwiftnanoarrowArrow stream format流格式✓✓✓✓✓✓✓✓✓ (4)Arrow file format文件格式✓✓✓✓✓✓✓✓Record batches✓✓✓✓✓✓✓✓✓Dictionaries字典✓✓✓✓✓✓✓Replacement dictionaries替换字典✓✓✓✓Delta dictionaries增量字典✓ (1)✓ (1)✓✓✓Tensors✓Sparse tensors✓Buffer compression缓冲压缩✓✓ (3)✓✓✓✓Endianness conversion字节序转换✓ (2)✓ (2)✓ (2)Custom schema metadata自定义元数据✓✓✓✓✓✓✓✓对应注记增量字典不支持嵌套字典遇到非本机字节序的数据读取时会自动做字节交换byte-swap因此跨大端/小端平台传输无需手动处理Java 的 LZ4 编解码器目前效率较低官方用 JIRA 编号 ARROW-11901 追踪性能改进nanoarrow 的 IPC 实现仅支持读取流格式即只实现了 reader 端。在 C 侧这些能力集中在 cpp/src/arrow/ipc/reader.hRecordBatchStreamReader、RecordBatchFileReader与writer.h对应RecordBatchStreamWriter、RecordBatchFileWriter中包括字典读取、压缩缓冲LZ4、ZSTD 等可配合 cpp/src/arrow/ipc/options.h 的IpcWriteOptions::codec配置、自动字节序转换等逻辑。JS 不支持缓冲区压缩Swift 除流格式、文件格式与 Record batches 外其余 IPC 能力均空白而 Tensors / Sparse tensorsTensor 与稀疏张量的 IPC 传输目前只有 C 提供。四、Flight RPC高性能数据服务框架的支持现状Arrow Flight 是构建在 gRPC 之上、面向 Arrow 数据的 RPC 框架规范见 docs/source/format/Flight.rst协议消息定义见 format/Flight.proto。其核心对象包括FlightDescriptor数据流标识可取PATH路径或CMD二进制命令两种形态、FlightInfo含 schema、描述符与若干FlightEndpoint、Ticket服务器端识别数据的不透明令牌客户端通过GetFlightInfo获取数据位置、再用DoGet(Ticket)拉取记录批次流或通过DoPut上传。4.1 传输层支持Flight RPC 传输CJavaGoJSC#RustJuliaSwiftgRPC 传输grpc:、grpctcp:✓✓✓✓✓gRPC 域套接字传输grpcunix:✓✓✓✓✓gRPC TLS 传输grpctls:✓✓✓✓✓UCX 传输ucx:✓JS、Julia、Swift 尚未提供 Flight 传输层实现UCX高性能网络传输库路径仅 C 支持。4.2 gRPC 传输下的功能支持Flight RPC 功能CJavaGoJSC#RustJuliaSwift全部 RPC 方法✓✓✓✓ (1)✓认证处理器Authentication handlers✓✓✓✓ (2)✓调用超时Call timeouts✓✓✓✓调用取消Call cancellation✓✓✓✓客户端并发调用 (3)✓✓✓✓✓自定义中间件Custom middleware✓✓✓✓RPC 错误码✓✓✓✓✓gRPC 传输下的注记C# 不支持Handshake与DoExchange两个方法其余 RPC 方法可用C# 使用 AspNetCore 的认证处理器实现认证该行表示单个客户端是否支持多个并发调用gRPC 下并发调用在单条连接上多路复用。4.3 UCX 传输下的功能支持Flight RPC 功能CJavaGoJSC#RustJuliaSwift全部 RPC 方法✓ (4)认证处理器调用超时调用取消客户端并发调用✓ (5)自定义中间件RPC 错误码✓UCX 传输下的注记仅支持DoExchange、DoGet、DoPut与GetFlightInfo四个方法且不支持认证、超时、取消与中间件每个并发调用在 UCX 下是到服务器的独立连接与 gRPC 的多路复用相反通常吞吐更好但会同时消耗更多服务器与客户端资源。这意味着若追求 Flight 的完整功能矩阵认证、超时、取消、中间件、错误码应优先选择 C、Java、Go 或 Rust 的 gRPC 实现UCX 传输适合对极致吞吐有要求、且可接受功能裁剪的 C 场景。仓库内java/flight、c_glib/arrow-flight-glib、ruby/red-arrow-flight等目录均可找到对应语言绑定的落地代码。五、Flight SQLSQL 元数据与语句执行协议实验性Flight SQL 是在 Flight 之上定义的 SQL 交互协议规范见 docs/source/format/FlightSql.rst消息定义见 format/FlightSql.proto。状态文档特别注明Flight SQL 仍处于实验阶段表中功能支持仅指客户端/服务器库本身实际数据库对单个功能是否可用取决于数据库对 Flight SQL 协议的实现情况。功能CJavaGoJSC#RustJuliaSwiftBeginSavepoint✓✓BeginTransaction✓✓CancelQuery✓✓ClosePreparedStatement✓✓✓✓✓CreatePreparedStatement✓✓✓✓✓CreatePreparedSubstraitPlan✓✓EndSavepoint✓✓EndTransaction✓✓GetCatalogs✓✓✓✓✓GetCrossReference✓✓✓✓✓GetDbSchemas✓✓✓✓✓GetExportedKeys✓✓✓✓✓GetImportedKeys✓✓✓✓✓GetPrimaryKeys✓✓✓✓✓GetSqlInfo✓✓✓✓✓GetTables✓✓✓✓✓GetTableTypes✓✓✓✓✓GetXdbcTypeInfo✓✓✓✓✓PreparedStatementQuery✓✓✓✓✓PreparedStatementUpdate✓✓✓✓✓StatementSubstraitPlan✓✓StatementQuery✓✓✓✓✓StatementUpdate✓✓✓✓✓可以看到能力分层的规律C 与 Java 覆盖全部 23 项包括事务/保存点、CancelQuery、以及 Substrait 计划相关的新接口CreatePreparedSubstraitPlan、StatementSubstraitPlanGo、C#、Rust 覆盖查询/元数据/预编译语句这一核心子集但不含事务与 Savepoint 相关方法JS、Julia、Swift 尚无 Flight SQL 实现。FlightSql.proto中的ActionCreatePreparedStatementRequest、ActionBeginTransactionRequest、TicketStatementQuery等消息即为这些功能的服务端动作载体。六、C Data Interface 与 C Stream Interface零拷贝互操作边界C Data Interfacedocs/source/format/CDataInterface.rst定义了基于 C 结构体的、跨语言零拷贝交换 Schema 与 Array 的 ABIC Stream Interfacedocs/source/format/CStreamInterface.rst则定义了生产者/消费者形式的流式传输 ABI。这两张表刻画了哪些语言能直接通过 C ABI 互相传递 Arrow 数据而不经过序列化。C Data Interface功能CPythonRRustGoJavaC/GLibRubyJuliaC#SwiftnanoarrowSchema export✓✓✓✓✓✓✓✓✓✓Array export✓✓✓✓✓✓✓✓✓✓Schema import✓✓✓✓✓✓✓✓✓✓Array import✓✓✓✓✓✓✓✓✓✓C Stream Interface功能CPythonRRustGoJavaC/GLibRubyJuliaC#SwiftnanoarrowStream export✓✓✓✓✓✓✓✓✓Stream import✓✓✓✓✓✓✓✓✓解读要点Python通过 pyarrow 的 Cython 绑定、R、Ruby、C/GLib 因跟随 C 实现在这两张表上全绿C、Rust、Go、C#、nanoarrow 也完整支持四类导出/导入nanoarrow 本身即围绕 C Data Interface 设计的轻量 C 实现Java 支持 C Data Interface 的 Schema/Array 导出导入但未实现 C Stream InterfaceJulia、Swift 两类接口均未实现。这也解释了 Arrow 生态中跨语言传数据零拷贝的常见落地方式只要语言支持 C Data Interface就可在共享内存场景下直接传递指针避免 IPC 序列化开销。七、第三方数据格式支持矩阵Arrow 库除了原生格式外还为常见数据格式提供读写集成。表中R 支持读取ReadW 支持写入Write。格式CJavaGoJSC#RustJuliaSwiftAvroRRCSVR/WR (2)R/WR/WR/WORCR/WR (1)ParquetR/WR (2)R/WR/W对应注记Java 的 ORC 读取通过 JNI 绑定实现由org.apache.arrow.orc:arrow-orc构件提供Java 的 CSV 与 Parquet 读取通过 JNI 绑定到 Arrow C Datasets由org.apache.arrow:arrow-dataset构件提供。这说明两点其一能力最强的仍是 C四种格式均可读写CSV/ORC/Parquet 对应 cpp/src/arrow/csv、cpp/src/arrow/parquet 与cpp/src/arrow/adapters/orc等目录其二Java 并非从零实现 CSV/ORC/Parquet而是通过 JNI 复用 C 实现因此其能力边界与 C Datasets 组件一致。Go 与 Rust 各自原生实现 CSV 与 Parquet 的读写Julia 原生实现 CSV 读写Avro 仅 Java 与 Go 提供只读支持JS、C#、Swift 暂未提供上述第三方格式读写。八、如何用好这张状态矩阵综合全文这张矩阵是跨语言选型与集成时的高价值能力地图建议按以下方式使用确定基准实现Python、R、Ruby、C/GLib 一律以 C 库为基准因此评估这些语言时直接查 C 行即可核对格式版本所有官方库均兼容格式 1.0.0 及后续小版本1.11.4只要不使用新版本特有的类型/布局如 Binary View、Run-End Encoded、Decimal256、MonthDayNano跨库互换就没有格式层面的障碍细节见 docs/source/format/Versioning.rst关注新特性窗口格式 1.3/1.4 引入的视图类型与 Run-End 布局目前仅少数语言支持若业务强依赖这些能力可选项基本限定在 C/Go及部分 C#零拷贝集成选 C Data Interface在支持该 ABI 的语言C、Python、R、Rust、Go、Java、C/GLib、Ruby、C#、nanoarrow之间可直接互传 Schema/Array需要流式生产-消费场景时再确认对方是否实现了 C Stream InterfaceJava、Julia、Swift 缺失Flight 选型关注功能裁剪gRPC 传输的 C/Java/Go/Rust 功能最全C# 缺Handshake/DoExchangeUCX 传输仅有 C 且方法子集受限Flight SQL 目前只有 C/Java 支持事务、Savepoint 与 Substrait 计划类接口。Apache Arrow 的状态文档本身也是一个活文档——随着格式小版本演进与新语言实现的完善矩阵中的单元格会持续变化。阅读时建议以仓库内 docs/source/status.rst 的当前内容为准并对照 docs/source/format/Columnar.rst 等规范原文理解每个能力项背后的格式定义。赞分享数据工程大数据序列化数据分析【免费下载链接】arrowApache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing项目地址https://gitcode.com/gh_mirrors/arrow13/arrow点击查看免费下载相关推荐Apache Arrow 实现状态全解数据类型、IPC、Flight 与跨语言接口支持矩阵Apache Arrow 实现状态全解数据类型、IPC、Flight 与跨语言接口支持矩阵 Apache Arrow 官方文档中的《Implementatio大数据数据分析数据工程序列化Apache Arrow 实现状态全景指南跨语言数据类型、IPC、Flight RPC 与格式支持能力对照Apache Arrow 实现状态全景指南跨语言数据类型、IPC、Flight RPC 与格式支持能力对照 导读 本文基于 Apache Arrow 官方文档数据工程数据分析大数据2025年最全Apache Arrow功能支持矩阵12种语言数据类型对比2025年最全Apache Arrow功能支持矩阵12种语言数据类型对比 你是否曾在跨语言数据处理时遭遇类型不兼容的困境是否在选择Arrow客户端时困惑于各大数据数据分析数据工程序列化创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

老旧档案数字化实战:OCR工具选型与PDF文字识别全流程

老旧档案数字化实战:OCR工具选型与PDF文字识别全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/24 12:59:51
Windows Update错误代码速查与排错实战

Windows Update错误代码速查与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/24 12:59:51
水煮肉片全流程详解:五星难度川菜的原料、配比与操作指南

水煮肉片全流程详解:五星难度川菜的原料、配比与操作指南

教程人工智能大模型RAG 【免费下载链接】all-in-rag 🔍大模型应用开发实战一:RAG 技术全栈指南,在线阅读地址:https://datawhalechina.github.io/all-in-rag/ 项目地址: https://gitcode.com/datawhalechina/all-in-ra…

📅 2026/9/24 12:54:50
MORE NEWS

更多资讯

📰

NocoBase开发环境搭建:5步跑通最小闭环+企业级配置思路

NocoBase开发环境搭建:5步跑通最小闭环企业级配置思路 【免费下载链接】nocobase NocoBase is an open-source AI no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on top of production-proven i…

📰

Boto3(AWS SDK for Python)IAM Policy 管理实战:创建、查询、附加与分离托管策略

后端云原生 【免费下载链接】boto3 AWS SDK for Python (Boto3) 项目地址: https://gitcode.com/gh_mirrors/bo/boto3 点击查看 免费下载 本文是基于 AWS SDK for Python(Boto3)的 IAM 策略管理实战指南,围绕 IAM 托管策略的完整…

📰

Beekeeper Studio 语言切换指南:3 分钟配好中文界面与区域设置

Beekeeper Studio 语言切换指南:3 分钟配好中文界面与区域设置 【免费下载链接】beekeeper-studio Modern and easy to use SQL client for MySQL, Postgres, SQLite, SQL Server, and more. Linux, MacOS, and Windows. 项目地址: https://gitcode.com/GitHub_Tr…

📰

以 180° 翻转的英文 “en-Qabs“ 语言包解析 HMCL 的“倒置英语“彩蛋:从 README_en_Qabs.md 到运行时翻译器

桌面应用游戏开发 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL 点击查看 免费下载 HMCL(Hello Minecraft! Launcher)的文档目录中…

📰

深入解读 SkQP:用 Skia 打造 Android CTS 图形驱动质量检测套件

图形学 【免费下载链接】skia Skia is a complete 2D graphic library for drawing Text, Geometries, and Images. See documentation for contribution instructions. 项目地址: https://gitcode.com/gh_mirrors/ski/skia 点击查看 免费下载 SkQP(Ski…

📰

长文本撑破单元格怎么办?tabulate4cj智能换行4步设置法详解

长文本撑破单元格怎么办?tabulate4cj智能换行4步设置法详解 【免费下载链接】tabulate4cj tabulate4cj - 使用 仓颉 轻松美化 表格数据。 项目地址: https://gitcode.com/Cangjie-SIG/tabulate4cj 用 tabulate4cj(仓颉语言表格库)渲染…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬