在 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 存储库(而不是分叉的存储库)中的**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++ 功能。