在 Arrow 代码库上工作 🧐#

了解 Arrow#

Apache Arrow 代码库包含了 Arrow 支持的大多数库的实现。

像 GLib (c_glib/), C++ (cpp/), C# (csharp/), Go (go/), Java (java/), JavaScript (js/), MATLAB (matlab/), Python (python/), R (r/) 和 Ruby (ruby/) 等语言在主文件夹中都有自己的子目录,如此处所述。

Rust 有自己的代码库,可在此处访问

在**特定语言的子目录**中,您可以找到与该语言相关的代码。例如

  • python/ 文件夹包含 pyarrow/ 文件夹,其中包含 pyarrow 包的代码和构建 pyarrow 时所需的 requirements 文件。

    pyarrow/ 包含 Python 和 Cython 代码。

    pyarrow/ 还包含 test/ 文件夹,其中包含 pyarrow 模块的所有测试。

  • r/ 目录包含 R 包。

arrow 代码库中包含的其他子目录是

  • ci/ 包含各种持续集成 (CI) 作业使用的脚本。

  • dev/ 包含开发人员在打包、测试或提交到 Arrow 时有用的脚本,以及扩展持续集成 (CI) 任务的定义。

  • .github/ 包含在 GitHub 持续集成 (CI) 上运行的工作流,由某些操作(例如打开 PR)触发。

  • docs/ 包含大部分文档。阅读文档贡献了解更多信息。

  • format/ 包含 Arrow 列式格式和其他项目部分(如 Flight RPC 框架)的二进制协议定义。

绑定、功能、修复和测试#

您可以阅读本节,以了解如何处理您遇到的问题。

根据您要解决的问题(添加简单绑定、添加功能、编写测试……),获取必要信息的方法各不相同。

在所有情况下,您都可以使用某种搜索工具来搜索函数。根据我们的经验,有两种好方法

  1. 通过 Arrow 代码库(不是 fork 的代码库)中的**GitHub 搜索**。这种方法很好,因为 GitHub 还允许您搜索函数定义和引用。

  2. 您选择的**IDE**。

绑定

术语“绑定”用于指代 C++ 实现中可以从其他语言的函数调用的函数。在 C++ 中定义函数后,我们必须手动创建绑定才能在该实现中使用它。

注意

通过查看**拉取请求**和**单元测试**来了解类似问题,您可以学到很多东西。

在 Python 中添加修复

如果您正在更新现有函数,最简单的方法是以交互方式运行 Python 或运行 Jupyter Notebook 并研究问题,直到您了解需要做什么。

之后,您可以在 GitHub 上搜索函数名称,以查看函数的定义位置。

此外,如果产生错误,错误很可能会指向您需要查看的文件。

Python - Cython - C++

在处理 Python 问题时,您很可能会遇到 Cython 代码。不太可能需要更新 C++ 代码,尽管有可能发生。

如前所述,底层代码是用 C++ 编写的。然后 Python 通过 Cython 连接到它。如果您不熟悉它,可以寻求帮助,并记住,**寻找类似的拉取请求和 GitHub 问题!**

添加测试

有些问题只是缺少测试。在这里,您可以搜索类似的函数,并查看这些函数的单元测试是如何编写的,以及它们如何应用于您的情况。

这同样适用于为您解决的问题添加测试。

新功能

如果您要在 Python 中添加新功能,可以查看教程以获取思路。

R 绑定的理念

在 C++ 计算函数和 R 函数之间编写绑定时,目标是通过与现有 R 函数相同的接口公开 C++ 功能。