Red Arrow:基于 GObject Introspection 的 Apache Arrow Ruby 绑定安装与实战指南
Red Arrow基于 GObject Introspection 的 Apache Arrow Ruby 绑定安装与实战指南【免费下载链接】arrowApache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing项目地址: https://gitcode.com/gh_mirrors/arrow13/arrowApache Arrow 是一个面向内存列式数据in-memory columnar data的多语言工具箱被广泛用于数据分析场景中的高效数据交换与处理。Red Arrowred-arrowgem正是 Apache Arrow 官方的 Ruby 绑定它不直接调用 C 接口而是经由 Apache Arrow GLib 与 GObject Introspection 这两层“胶水”在运行时自动生成 Ruby 绑定从而让 Ruby 开发者可以用惯用的 Ruby 语法操作 Arrow 的 Table、RecordBatch、Array 等核心数据结构。本文以仓库中 ruby/red-arrow/README.md 为主线结合源码讲解安装流程、Table.load/Table.save的多格式读写能力、开发与测试方式帮助你在自己的 Ruby 项目中快速落地 Arrow 数据处理管线。Red Arrow 的架构定位三层桥接Red Arrow 之所以能在 Ruby 里操作 Apache Arrow靠的是一条明确的三层技术链Apache Arrow C底层高性能实现位于仓库 cpp 目录。GObject Introspection 无法直接消费 C 类型系统因此不能直接绑定 C。Apache Arrow GLib位于仓库 c_glib 目录是 Apache Arrow C 的 C 语言包装层。它为 C 提供了一套 GObject 化的 API作为 C 与 GObject Introspection 之间的桥。gobject-introspection gemGObject Introspection 的 Ruby 绑定可以在运行时读取 GLib 的 introspection 数据并自动生成 Ruby 绑定代码。Red Arrow 使用 Apache Arrow GLib 与 gobject-introspection gem 共同完成绑定生成二者缺一不可。从源码入口可以直观看到这一点ruby/red-arrow/lib/arrow.rb 在require arrow时依次加载require extpp/setup require gio2 require arrow/version require arrow/loader module Arrow class Error StandardError end Loader.load end其中Loader继承自GObjectIntrospection::Loader见 ruby/red-arrow/lib/arrow/loader.rb通过super(Arrow, Arrow)加载Arrow命名空间并在post_load中依次加载 Ruby 侧的补充实现require_libraries、原生扩展require_extension_library即arrow.so由 ext/arrow/arrow.cpp 等编译而来、GC 保护逻辑以及启动回调分发线程。安装 Red Arrow前置条件先安装 Apache Arrow GLibRed Arrow 是建立在 Apache Arrow GLib 之上的绑定因此安装顺序必须是先装 Apache Arrow GLib再装 Red Arrow。Arrow GLib 的安装方式随平台不同而异官方安装文档会按发行版给出对应包名与安装命令macOS 上常见的做法是通过 Homebrew 安装详见下文“开发环境搭建”小节。安装完成后验证 GLib 层可用再执行 gem 安装% gem install red-arrowgem 本身会自动携带其运行时依赖见 ruby/red-arrow/red-arrow.gemspecbigdecimal 3.1.0csvextpp 0.1.1用于扩展库的构建与加载gio2 3.5.0GObject Introspection 的 Ruby 绑定native-package-installer用于探测/安装系统原生包pkg-config用于编译时定位 GLib/Arrow 的头文件与库gemspec 中还通过spec.metadata[msys2_mingw_dependencies]声明了 WindowsMSYS2/MinGW环境下对arrow系统包的版本要求版本号取自 ruby/red-arrow/lib/arrow/version.rb 中定义的Arrow::Version当前仓库为17.0.0-SNAPSHOT。版本对应关系Red Arrow 的 gem 版本与 Apache Arrow 本身保持同步发布版本号由Arrow::Version::MAJOR.MINOR.MICRO.TAG拼接而成见 gemspec 中version_components.compact.join(.)。这意味着你需要安装与 red-arrow 版本匹配的 Apache Arrow GLib避免 API 不兼容。快速上手读写 Arrow 文件README 给出了最核心的用法——加载 Arrow 文件、处理数据、再保存回去require arrow table Arrow::Table.load(/dev/shm/data.arrow) # Process data in table table.save(/dev/shm/data-processed.arrow)这里require arrow会触发上述Loader.load的完整初始化流程。Arrow::Table.load与Arrow::Table.save是 Red Arrow 提供的高层入口分别委托给 ruby/red-arrow/lib/arrow/table-loader.rb 的TableLoader与 ruby/red-arrow/lib/arrow/table-saver.rb 的TableSaver见 ruby/red-arrow/lib/arrow/table.rb 中Table.load/Table.save的定义。按扩展名自动推断格式TableLoader与TableSaver都会先根据路径扩展名推断格式与压缩方式fill_options方法再选择对应的加载/保存策略。例如.arrow或没有可识别扩展名时默认按 Arrow 文件格式format: :arrow处理同时支持按需覆盖格式选项。底层load方法会判断输入类型URI 走load_from_uri_http/load_from_uri_https目录走load_from_directory其余走load_from_file。支持的文件格式从TableLoader与TableSaver的实现看Red Arrow 支持以下格式的读写对应load_as_*/save_as_*系列私有方法格式load 选项save 选项底层实现Arrow 文件Random Access:arrow/:arrow_file:arrow/:arrow_fileRecordBatchFileReader/RecordBatchFileWriterArrow 流式Streaming:arrow_streaming旧名:stream:arrow_streaming旧名:streamRecordBatchStreamReader/RecordBatchStreamWriterCSV:csv:csvCSVLoader/ RubyCSVTSV:tsv:tsvCSV 逻辑分隔符为\tFeather:feather:featherFeatherFileReader/write_as_featherJSON:json—JSONReaderJSONReadOptionsORC:orc—ORCFileReader仅当构建包含 ORC 支持时几点实现细节值得注意load_as_arrow会先尝试按 Arrow 文件读取失败后自动回退到流式读取load_as_arrows对历史数据兼容友好。旧格式名:batch、:stream已标记为 deprecatedREADME 与源码注释均建议改用:arrow_file/:arrow_streaming。读 CSV 时可通过 options 透传CSVLoader的配置如分隔符等load_as_tsv内部就是把delimiter强制设为\t。保存时如果指定compression选项open_output_stream会用Codec.new(compression)创建压缩编解码器并包装成CompressedOutputStream后再写入。通过 options 显式指定格式Table.load与Table.save都接受第二个 options 参数。例如强制按流式格式读取table Arrow::Table.load(data.arrows, format: :arrow_streaming) table.save(out.arrow, format: :arrow_file)从零构造 Table多种初始化方式除了从文件加载ruby/red-arrow/lib/arrow/table.rb 中的Table#initialize支持多种构造方式便于在内存中直接建表由 Hash 的列名到 Ruby 数组构造类型自动推断最简单table Arrow::Table.new(count [0, 2, nil, 4], visible [true, nil, nil, false])由Arrow::Column数组构造count_field Arrow::Field.new(count, :uint32) count_array Arrow::UInt32Array.new([0, 2, nil, 4]) count_column Arrow::Column.new(count_field, count_array) table Arrow::Table.new([count_column])由 Schema 原始记录raw records构造schema {count: :uint32, visible: :boolean} raw_records [[0, true], [2, nil], [nil, nil], [4, false]] table Arrow::Table.new(schema, raw_records)此外还支持HashString, Arrow::Array、HashString, Arrow::ChunkedArray、Schema 列/数组/RecordBatch 等多种组合实现会自动做类型转换并调用底层initialize_raw。表处理能力切片、合并、排序与聚合Table混入了多个能力模块见 ruby/red-arrow/lib/arrow/table.rb 顶部的 include 列表ColumnContainable按列访问、查找列GenericFilterable布尔数组/掩码过滤GenericTakeable按索引取子集InputReferable输入生命周期引用管理share_inputRecordContainableRecord 级访问行切片 sliceslice支持非常丰富的参数形态整数索引返回单个Record、(offset, length)、Range、布尔掩码数组、条件 Hash内部用Slicer构造、、等条件并做 AND 合并甚至支持 block 形式配合Slicer编写条件。实现中还对负数索引做了归一化处理。连接 joinTable#join自 7.0.0 起提供支持自然连接、单键连接、多键连接与键重命名left_suffix/right_suffix底层通过ExecutePlan构建 source 节点、HashJoinNodeOptions哈希连接节点与 sink 节点最后从 sink 读取结果表left_outputs/right_outputs可控制输出列。排序与聚合group、window、排序选项SortOptions/SortKey等能力也在 Ruby 侧提供了面向对象封装见 ruby/red-arrow/lib/arrow/group.rb、ruby/red-arrow/lib/arrow/rolling-window.rb 等可用惯用的 Ruby 风格进行分组聚合分析。底层读取示例RecordBatch 级遍历README 只给出了高层Table.load用法。如果需要对大数据分块处理可以像 ruby/red-arrow/example/read-file.rb 那样直接使用MemoryMappedInputStreamRecordBatchFileReader逐批读取 RecordBatchrequire arrow Arrow::MemoryMappedInputStream.open(/tmp/file.arrow) do |input| reader Arrow::RecordBatchFileReader.new(input) fields reader.schema.fields reader.each_with_index do |record_batch, i| puts( * 40) puts(record-batch[#{i}]:) fields.each do |field| field_name field.name values record_batch.collect do |record| record[field_name] end puts( #{field_name}: #{values.inspect}) end end end仓库 ruby/red-arrow/example 下还提供了read-stream.rb、write-file.rb、write-stream.rb、read-pipe.rb、write-pipe.rb等示例覆盖流式读写与管道pipe传输场景可作为进一步学习的起点。开发与测试从源码构建 Red ArrowREADME 指出若要从源码开发 Red Arrow需要先在 master 上安装 Apache Arrow C 与 Apache Arrow GLib然后在仓库内执行$ cd ruby/red-arrow $ bundle install $ bundle exec rake test其中bundle install依据 ruby/red-arrow/Gemfile 安装开发依赖test-unit、rake、yard、benchmark-driver等。rake test任务会运行 ruby/red-arrow/test/run-test.rb测试套件覆盖 Array、Table、RecordBatch、Schema、各种数据类型的 ArrayBuilder、CSV/Feather/ORC 读写、排序test-sort-indices.rb、表达式test-expression.rb等主题。Rakefile中还定义了compile、configure、benchmark与yard等任务其中 benchmark 任务通过benchmark-driver读取 ruby/red-arrow/benchmark 下的 YAML 配置raw-records/values两组来评估各数据类型的性能。macOS 与 HomebrewmacOS 上推荐使用 Homebrew 安装两个--head版本的原生包以确保与仓库 master 代码兼容$ cd ruby/red-arrow $ bundle install $ brew install apache-arrow --head $ brew install apache-arrow-glib --head $ bundle exec rake test安装顺序上bundle install在前、brew 装原生库在后也可以但务必保证两条 brew 安装命令都执行且版本与 red-arrow 匹配--head即构建当前开发版。小结Red Arrow 通过“Apache Arrow C → Apache Arrow GLib → gobject-introspection gem → Red Arrow”这条桥接链为 Ruby 带来了完整的 Arrow 内存列式数据能力。从 README 的安装与最小用法出发你可以在 lib/arrow 中探索 Table 的多格式加载/保存、多种建表方式、切片/连接/排序/聚合等能力在 example 中看到 RecordBatch 级读写示例在 test 中查阅与源码同步的测试用例。无论你是想用 Ruby 读取 Arrow/Feather/CSV 数据、构建分析管线还是跨语言共享列式数据Red Arrow 都提供了一条开箱即用的路径。【免费下载链接】arrowApache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing项目地址: https://gitcode.com/gh_mirrors/arrow13/arrow创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

5步搞定前任约见面是什么心态项目最佳实践

5步搞定前任约见面是什么心态项目最佳实践

5步搞定前任约见面是什么心态项目最佳实践 看了一堆教程还是不会写项目?别急,这不是你笨,是没人告诉你 最佳实践 到底长什么样。今天这篇《前任约见面是什么心态》实战教程,直接带你从0到1搭建一个可运行的Web应用。 项目目标…

2026/9/23 14:55:19 阅读更多 →
搞定httpwww:3个性能优化点让你代码跑通

搞定httpwww:3个性能优化点让你代码跑通

搞定httpwww:3个性能优化点让你代码跑通 复制来的 httpwww 相关代码,是不是经常报错?别急,这通常是环境配置或底层原理没搞懂。 面试中被问到 HTTP 性能优化,很多人只会背“加缓存”,其实细节才决定成败。 今天拆解…

2026/9/23 14:55:19 阅读更多 →
NBA 15-18赛季数据包实战:Python数据分析与Elo等级分计算

NBA 15-18赛季数据包实战:Python数据分析与Elo等级分计算

简介:这份资源面向具备一定Python基础、希望上手真实数据分析项目的高校学生与数据爱好者,围绕NBA比赛数据展开,提供从数据采集到可视化呈现的完整实践素材。压缩包共14个文件,约245KB,以11个CSV数据表为主&#xff0c…

2026/9/23 14:55:18 阅读更多 →

最新新闻

RBAC权限系统设计与认证授权实践指南

RBAC权限系统设计与认证授权实践指南

1. 认证授权基础概念解析认证(Authentication)和授权(Authorization)是每个后端开发者必须掌握的核心安全机制。认证解决"你是谁"的问题,就像进入公司大楼时需要刷工牌确认身份;授权则解决"…

2026/9/23 15:43:19 阅读更多 →
数仓分层实战:ODS、CDM、ADS三层架构设计与避坑指南

数仓分层实战:ODS、CDM、ADS三层架构设计与避坑指南

1. 从一次数据口径吵架说起:数仓分层的本质是什么刚入行那会儿,我参与过一个零售项目的数仓建设。上线第二周,运营和财务就吵起来了——同一笔订单金额,报表A显示退款后净额,报表B显示原始交易额,两个数字差…

2026/9/23 15:43:19 阅读更多 →
Python隐写分析实战:LSB、CNN与PDF/JPEG隐写检测

Python隐写分析实战:LSB、CNN与PDF/JPEG隐写检测

简介:这份资源面向信息安全、图像处理方向的本科生与研究生,以及需要完成隐写分析课程设计或毕业设计的开发者,系统整理了LSB信息隐藏与卷积神经网络隐写分析的完整实现方案。包内共137个文件,约304.81MB,以Python源码…

2026/9/23 15:43:19 阅读更多 →
Python+OpenCV实现材料表面缺陷检测:从阈值分割到结果输出

Python+OpenCV实现材料表面缺陷检测:从阈值分割到结果输出

简介:这套基于Python与OpenCV的材料缺陷检测程序,适合作为毕业设计、课程作业或工程实训项目。资源面向希望入门图像处理与计算机视觉的学习者,提供了从图像读取、预处理、阈值分割到缺陷标记与结果输出的完整流程,并附带流程图与…

2026/9/23 15:43:19 阅读更多 →
直流电路入门到精通:3个步骤解决环境配置卡壳难题

直流电路入门到精通:3个步骤解决环境配置卡壳难题

直流电路入门到精通:3个步骤解决环境配置卡壳难题 刚拿到直流电路分析项目,配置环境就卡半天?别慌,这太正常了。很多初学者一上来就陷入依赖冲突的泥潭,连第一步都迈不出去。其实,直流电路模拟的核心逻辑并不复杂,难的是把工具链理顺。…

2026/9/23 15:43:19 阅读更多 →
搞定中国有多少个省:从数据建模到项目实战的入门到精通指南

搞定中国有多少个省:从数据建模到项目实战的入门到精通指南

搞定中国有多少个省:从数据建模到项目实战的入门到精通指南 刚学会写 for 循环,却面对真实业务数据束手无策?很多开发者卡在“知道语法”和“能搭项目”之间的鸿沟里。别急,今天我们就拿一个看似简单却极易踩坑的问题—— 中国有多少个省…

2026/9/23 15:42:18 阅读更多 →

日新闻

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A…

2026/9/23 0:00:23 阅读更多 →
2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我 刚把开发环境的显示器从1080P换到2K,跑老项目直接报错,版本升级后 API…

2026/9/23 0:01:25 阅读更多 →
3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点 官方文档翻了三遍还是云里雾里?别急,美眉图在实战项目中常被用来做数据可视化,但它的原理比你想的简单。今天咱们直接上手,用一个完整的小项目把美眉图跑通,不再死磕那些冗长的理论说明。…

2026/9/23 0:01:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →