參與貢獻#

目前 Apache Arrow 的主要受眾是資料系統的開發者;大多數人將透過使用 Apache Arrow 作為內部資料處理以及與其他啟用 Arrow 系統互操作的系統來間接使用 Apache Arrow。

即使您不打算貢獻 Apache Arrow 本身或其他專案中的 Arrow 整合,我們也很高興有您的參與

PyArrow 架構#

PyArrow 在很大程度上是 Arrow C++ 實作所提供功能的包裝器。該函式庫嘗試採用 C++ 中可用的功能,並透過更 Python 化且使用起來不太複雜的使用者體驗來公開它。因此,雖然在某些情況下,將 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 檔案通常是建立 glue 程式碼的地方,它將 C++ 功能組合在一起,將其轉變為 Python 類別和方法。它們可以被認為是 *.py 檔案公開的功能的內部實作。

  • includes/*.pxd 檔案是宣告原始 C++ 函式庫 API 以供 Cython 中使用的地方。在此,C++ 類別和方法按原樣宣告,以便在其他 .pyx 檔案中,它們可用於實作 Python 類別、函數和輔助程式。

  • 除了 Arrow C++ 函式庫(其依賴性在前一行中提及)之外,PyArrow 也基於 PyArrow C++,專用於 python/pyarrow/src/arrow/python 目錄中的程式碼片段,並為轉換為和從 numpy 或 pandas 轉換以及允許在 C++ 中使用 Python 物件和回呼的類別等功能提供底層程式碼。