在 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 框架)的二进制协议定义。
绑定、功能、修复和测试#
您可以通读本节,以了解如何解决您遇到的库问题。
根据您想要解决的问题(添加简单绑定、添加功能、编写测试等),有不同的方法来获取必要的信息。
在所有情况下,您都可以通过某种搜索工具搜索函数来帮助自己。根据我们的经验,有两种好的方法:
通过 Arrow 仓库(非分叉仓库)中的 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++ 功能。