在 Arrow 代码库中工作 🧐#

熟悉 Arrow#

Apache Arrow 仓库包含了 Arrow 可用的绝大多数库的实现。

像 GLib (c_glib/)、C++ (cpp/)、MATLAB (matlab/)、Python (python/)、R (r/) 和 Ruby (ruby/) 等语言都在主文件夹中拥有各自的子目录,如这里所示。

以下语言实现有自己的仓库:

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

  • python/ 文件夹包含 pyarrow/ 文件夹,其中包含 pyarrow 包的代码以及构建 pyarrow 时所需的依赖文件。

    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 仓库(非分叉仓库)中的 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++ 功能。