arrow系列4-准备开始(getting strated 翻译)
作者:yunjinqi   类别:    日期:2023-10-14 11:08:49    阅读:472 次   消耗积分:0 分    

开始 

以下文章演示了Arrow的安装、使用和基本理解。这些文章将帮助您快速设置Arrow,并让您初步了解该库的功能。具体包括:安装和链接指南;代码库中使用的约定以及建议用户使用的约定;以及教程,包括:

  1. 构建Arrow数组和表格结构

  2. 读写Parquet、Arrow和CSV文件

  3. 在数组上执行计算内核

  4. 读写多文件分区数据集

从这里开始,以获得对Arrow的基本理解,然后转到用户指南,以探索更具体的主题和基本概念,或者查看API参考,以探索Arrow的API。


在您自己的项目中使用Arrow C++ 

本部分假定您已经在系统上安装了Arrow C++库,无论是通过包管理器安装还是通过自己构建。

在您自己的C++项目中集成Arrow C++库的推荐方法是使用CMake的find_package函数来查找和集成依赖项。如果您不使用CMake作为构建系统,您可以使用pkg-config来查找已安装的Arrow C++库。

CMake 基本用法 这个最小的CMakeLists.txt文件将一个my_example.cc源文件编译成一个可执行文件,链接到Arrow C++共享库:

cmake_minimum_required(VERSION 3.16)

project(MyExample)

find_package(Arrow REQUIRED)

add_executable(my_example my_example.cc)
target_link_libraries(my_example PRIVATE Arrow::arrow_shared)

在上述示例中,使用find_package(Arrow REQUIRED)来查找Arrow C++的安装,如果找到了Arrow C++库,它会设置一些CMake变量,例如${Arrow_FOUND}是一个布尔变量,如果找到了Arrow C++库,它为true。

还有一些已创建的目标,可以链接到这些目标,例如Arrow::arrow_shared链接到Arrow共享库。

大多数情况下,推荐使用Arrow共享库。

如果Arrow安装在自定义路径而不是通用系统路径上,您需要将Arrow安装路径添加到CMAKE_PREFIX_PATH。

CMAKE_PREFIX_PATH可以作为CMake变量或环境变量来定义。

您的系统可能已经定义了CMAKE_PREFIX_PATH环境变量,可以使用以下方法将其扩展到您的Arrow安装路径。

在这种情况下,ARROW_ROOT应该包含您的Arrow安装路径:

export CMAKE_PREFIX_PATH=${ARROW_ROOT}${CMAKE_PREFIX_PATH:+:${CMAKE_PREFIX_PATH}}

如果要使用CMake变量,可以在配置项目时添加它,如下所示,以包含可能存在的CMAKE_PREFIX_PATH环境变量:

cmake ... -DCMAKE_PREFIX_PATH=${ARROW_ROOT}${CMAKE_PREFIX_PATH:+:${CMAKE_PREFIX_PATH}}

请注意,在我们的find_package实现中,COMPONENTS参数的用法目前不受支持。

其他可用的包 

还有其他可用的包,它们也可以与find_package指令一起使用。以下是所有可用的包列表以及创建的目标:

截图 2023-10-14 10-59-38.png

请注意,CMake区分大小写。上面列出的名称和变量必须准确拼写。


pkg-config

基本用法 

您可以通过以下命令行获取适当的构建标志:

pkg-config --cflags --libs arrow

如果您希望链接Arrow C++静态库,需要添加--static选项:

pkg-config --cflags --libs --static arrow

这个最小的Makefile文件将一个my_example.cc源文件编译成一个可执行文件,链接到Arrow C++共享库:

my_example: my_example.cc
     $(CXX) -o $@ $(CXXFLAGS) $< $$(pkg-config --cflags --libs arrow)

许多构建系统支持pkg-config。例如:

GNU Autotools

CMake(但您应该使用find_package(Arrow)代替)

Meson

可用的包 

Arrow C++为每个模块提供了一个pkg-config包。以下是所有可用的包:

  • arrow-csv

  • arrow-cuda

  • arrow-dataset

  • arrow-filesystem

  • arrow-flight-testing

  • arrow-flight

  • arrow-json

  • arrow-orc

  • arrow-python-flight

  • arrow-python

  • arrow-tensorflow

  • arrow-testing

  • arrow

  • gandiva

  • parquet

关于链接的注意事项 

一些Arrow组件具有依赖项,您可能希望在自己的项目中使用这些依赖项。必须小心确保您的项目以与Arrow相同的方式(静态或动态)链接相同版本的这些依赖项,否则可能会发生ODR冲突,导致程序崩溃或静默损坏数据。

特别是,Arrow Flight及其依赖项Protocol Buffers(Protobuf)和gRPC可能会引起问题。在使用Arrow Flight时,请注意以下准则:

如果静态链接Arrow Flight,Protobuf和gRPC也必须进行静态链接,动态链接也是如此。

一些平台(例如,撰写本文时的Ubuntu 20.04)可能提供的Protobuf和/或gRPC版本不够新以满足Arrow Flight的要求。在这种情况下,Arrow Flight会捆绑这些依赖项,因此必须小心不要将Arrow Flight库与平台的Protobuf/gRPC库混合使用(否则将在您的应用程序中链接两个版本的Protobuf和/或gRPC)。

最简单的方法可能是依赖于从源代码构建的Arrow版本,您可以控制每个依赖项的源代码以及它们是静态链接还是动态链接。请参阅Building Arrow C++以获取说明。或者,可以使用Arrow作为包管理器,如Conda或vcpkg,它将管理Arrow及其依赖项的一致版本。

运行时依赖 

尽管Arrow在Linux和macOS上使用操作系统提供的时区数据库,但在Windows上需要用户提供的数据库。您必须下载并提取IANA时区数据库的文本版本,并添加Windows时区映射XML。要下载,您可以使用以下批处理脚本:

curl https://data.iana.org/time-zones/releases/tzdata2021e.tar.gz --output tzdata.tar.gz
mkdir tzdata
tar --extract --file tzdata.tar.gz --directory tzdata
move tzdata %USERPROFILE%\Downloads\tzdata
@rem 还需要Windows时区映射
curl https://raw.githubusercontent.com/unicode-org/cldr/master/common/supplemental/windowsZones.xml ^
  --output %USERPROFILE%\Downloads\tzdata\windowsZones.xml

默认情况下,时区数据库将在%USERPROFILE%\Downloads\tzdata处检测到,但您可以在运行时设置自定义路径在arrow::ArrowGlobalOptions中:

arrow::GlobalOptions options;
options.timezone_db_path = "path/to/tzdata";
ARROW_RETURN_NOT_OK(arrow::Initialize(options));


版权所有,转载本站文章请注明出处:云子量化, http://www.woniunote.com/article/336
上一篇:arrow系列3-如何编译运行第一个arrow程序
下一篇:arrow系列4---arrow API规范(Conventions)