nanoarrow#
nanoarrow 库是一组用于生成和使用 Arrow 数据的辅助工具,包括 Arrow C 数据、Arrow C 流 和 Arrow C 设备 结构以及 序列化 Arrow IPC 格式。nanoarrow 的愿景是,库应该能够轻松地生成和使用 Arrow 数据:它通过提供高质量、易于采用的辅助工具来实现这一愿景,这些工具可以用于生成、使用和测试 Arrow 数据类型和数组。
nanoarrow 库的设计目标是
体积小:nanoarrow 的 C 运行时编译成几百 KB,其 R 和 Python 绑定安装大小均为 ~1 MB。
易于依赖:nanoarrow 的 C 库以两个文件(nanoarrow.c 和 nanoarrow.h)的形式分发,其 R 和 Python 绑定没有依赖项。
实用:Arrow 列式格式包含各种数据类型和数据编码选项。在切实可行的情况下,nanoarrow 努力支持整个 Arrow 列式规范(有关实现状态,请参见 Arrow 实现状态 页面)。
入门#
nanoarrow Python 绑定可在 PyPI 和 conda-forge 获取。
pip install nanoarrow
conda install nanoarrow -c conda-forge
nanoarrow R 包可在 CRAN 获取。
install.packages("nanoarrow")
C 库可以通过生成核心库及其组件的捆绑版本来使用。这是 R 和 Python 绑定内部使用的版本。
python ci/scripts/bundle.py \
--source-output-dir=dist \
--include-output-dir=dist \
--header-namespace= \
--with-device \
--with-ipc \
--with-testing \
--with-flatcc
CMake 也通过构建/安装和 find_package()
或使用 FetchContent
支持。
fetchcontent_declare(nanoarrow
URL "https://apache.org/dyn/closer.lua?action=download&filename=arrow/nanoarrow-0.5.0/apache-arrow-0.5.0.tar.gz")
fetchcontent_makeavailable(nanoarrow)
C 库也可以用作 Meson 子项目,使用以下命令安装:
mkdir subprojects
meson wrap install nanoarrow
…并声明为依赖项:
nanoarrow_dep = dependency('nanoarrow')
example_exec = executable('example_meson_minimal_app',
'src/app.cc',
dependencies: [nanoarrow_dep])
有关 C、C++、Python 和 R 库的扩展教程和 API 参考,请参见 nanoarrow 文档。
nanoarrow GitHub 存储库 还提供了大量 示例,涵盖如何在各种构建配置中使用 nanoarrow。
开发#
使用 CMake 构建#
CMake 是用于开发和测试 nanoarrow C 库的主要构建系统。可以使用以下命令构建 nanoarrow:
mkdir build && cd build
cmake ..
cmake --build .
使用测试构建 nanoarrow 目前需要 Arrow C++。如果通过系统包管理器(如 apt
、dnf
或 brew
)安装,则可以使用以下命令构建测试:
mkdir build && cd build
cmake .. -DNANOARROW_BUILD_TESTS=ON
cmake --build .
可以使用 ctest
运行测试。
使用 Meson 构建#
CMake 是 nanoarrow 的官方支持构建系统。但是,Meson 后端是一个实验性功能,您可能也希望尝试。
meson setup builddir
cd builddir
在设置项目后,请务必启用所需的选项
meson configure -Dtests=true -Dbenchmarks=true
如果 Arrow 安装在系统上的非标准位置,则可能需要传递 --pkg-config-path <path to directory with arrow.pc>
参数到上面的设置或配置步骤。
有了上述设置,compile
命令应该会完成剩下的工作
meson compile
构建成功后,可以使用以下命令执行测试套件和基准测试:
meson test nanoarrow: # default test run
meson test nanoarrow: --wrap valgrind # run tests under valgrind
meson test nanoarrow: --benchmark --verbose # run benchmarks