正在處理 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 儲存庫(非 Fork 的儲存庫)中的 GitHub 搜尋。這種方式很棒,因為 GitHub 也讓您搜尋函式定義和參考。

  2. 您選擇的 IDE

綁定

術語「綁定」用於指稱 C++ 實作中的一個函式,該函式可以從另一種語言的函式中呼叫。在 C++ 中定義函式後,我們必須手動建立綁定,才能在該實作中使用它。

注意

您可以透過查看Pull Request單元測試來學習許多關於類似問題的知識。

在 Python 中新增修正

如果您要更新現有的函式,最簡單的方法是以互動方式執行 Python 或執行 Jupyter Notebook,並研究問題,直到您了解需要做什麼。

之後,您可以在 GitHub 上搜尋函式名稱,以查看函式的定義位置。

此外,如果產生錯誤,錯誤很可能會將您指向您需要查看的檔案。

Python - Cython - C++

當處理 Python 問題時,您很可能會遇到 Cython 程式碼。C++ 程式碼需要更新的可能性較小,儘管這可能會發生。

如前所述,底層程式碼是以 C++ 撰寫的。然後 Python 透過 Cython 連接到它。如果您不熟悉它,可以尋求協助,並記住,尋找類似的 Pull Request 和 GitHub 議題!

新增測試

有些議題只缺少測試。在這裡,您可以搜尋類似的函式,並查看這些函式的單元測試是如何撰寫的,以及它們如何在您的案例中應用。

這也適用於為您已解決的議題新增測試。

新功能

如果您要在 Python 中新增新功能,您可以查看 教學 以取得想法。

R 綁定背後的哲學

在撰寫 C++ 運算函式和 R 函式之間的綁定時,目標是透過與現有 R 函式相同的介面公開 C++ 功能。