参与贡献#

目前,Apache Arrow 的主要受众是数据系统的开发人员;大多数人将通过使用它进行内部数据处理并与其他启用 Arrow 的系统互操作的系统间接使用 Apache Arrow。

即使您不打算为 Apache Arrow 本身或在其他项目中集成 Arrow 做贡献,我们也很乐意欢迎您参与

PyArrow 架构#

PyArrow 在很大程度上是围绕 Arrow C++ 实现提供的功能的一个包装器。 该库试图将 C++ 中可用的东西,通过更 Pythonic 且使用起来不那么复杂的用户体验来公开。因此,虽然在某些情况下,将 C++ 中的内容映射到 Python 中的内容可能很容易,但在许多情况下,C++ 类和方法被用作构建更易于使用的实体的基础。

Four layers of PyArrow architecture: .py, .pyx, .pxd and low level C++ code.
  • pyarrow 包中的 *.py 文件通常是声明暴露给用户的实体的地方。在某些情况下,如果这些文件想要在不做修改的情况下按原样公开实体,它们可能会直接从内部实现中导入实体。

  • lib.pyx 文件是将大多数核心 C++ libarrow 功能公开给 Python 的地方。此模块的大部分实现依赖于包含的 *.pxi 文件,其中构建特定的部分。虽然作为 pyarrow.lib 暴露给 Python,但其内容应被视为内部内容。然后,公共类通过从 pyarrow.lib 导入,直接暴露在其他模块(如 pyarrow 本身)中。

  • _*.pyx 文件通常是创建胶水代码的地方,它将 C++ 功能组合在一起,将其转换为 Python 类和方法。它们可以被认为是 *.py 文件公开的功能的内部实现。

  • includes/*.pxd 文件是声明 Cython 中使用的原始 C++ 库 API 的地方。在这里,声明了 C++ 类和方法,以便在其他 .pyx 文件中,它们可以用于实现 Python 类、函数和帮助程序。

  • 除了前一行提到的 Arrow C++ 库的依赖关系外,PyArrow 还基于 PyArrow C++,它是位于 python/pyarrow/src/arrow/python 目录中的专用代码,为诸如与 numpy 或 pandas 相互转换以及允许在 C++ 中使用 Python 对象和回调的类等功能提供底层代码。