在 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 框架)的二进制协议定义。
绑定、功能、修复和测试#
您可以阅读本节,以了解如何处理您遇到的问题。
根据您要解决的问题(添加简单绑定、添加功能、编写测试……),获取必要信息的方法各不相同。
在所有情况下,您都可以使用某种搜索工具来搜索函数。根据我们的经验,有两种好方法
通过 Arrow 代码库(不是 fork 的代码库)中的**GitHub 搜索**。这种方法很好,因为 GitHub 还允许您搜索函数定义和引用。
您选择的**IDE**。
绑定
术语“绑定”用于指代 C++ 实现中可以从其他语言的函数调用的函数。在 C++ 中定义函数后,我们必须手动创建绑定才能在该实现中使用它。
注意
通过查看**拉取请求**和**单元测试**来了解类似问题,您可以学到很多东西。
在 Python 中添加修复
如果您正在更新现有函数,最简单的方法是以交互方式运行 Python 或运行 Jupyter Notebook 并研究问题,直到您了解需要做什么。
之后,您可以在 GitHub 上搜索函数名称,以查看函数的定义位置。
此外,如果产生错误,错误很可能会指向您需要查看的文件。
Python - Cython - C++
在处理 Python 问题时,您很可能会遇到 Cython 代码。不太可能需要更新 C++ 代码,尽管有可能发生。
如前所述,底层代码是用 C++ 编写的。然后 Python 通过 Cython 连接到它。如果您不熟悉它,可以寻求帮助,并记住,**寻找类似的拉取请求和 GitHub 问题!**
添加测试
有些问题只是缺少测试。在这里,您可以搜索类似的函数,并查看这些函数的单元测试是如何编写的,以及它们如何应用于您的情况。
这同样适用于为您解决的问题添加测试。
新功能
如果您要在 Python 中添加新功能,可以查看教程以获取思路。
R 绑定的理念
在 C++ 计算函数和 R 函数之间编写绑定时,目标是通过与现有 R 函数相同的接口公开 C++ 功能。