arrow的使用

博客介绍了如何利用pandas 2.0中引入的pyarrow后端提升性能,以改造backtrader。作者计划使用cython和C++重写backtrader框架,并将arrow作为底层数据结构,以替代现有的python array。安装pyarrow推荐使用vcpkg,并提供了CMakeLists.txt和compute_example.cc的编译方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pandas2.0引入了pyarrow作为可选后端,比numpy的性能提高很多,所以为了改造backtrader,用cython和c++重写整个框架,准备用arrow作为底层的数据结构(backtrader现在的底层数据结构是基于python array构建的)

安装arrow推荐使用vcpkg

git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
./vcpkg install arrow

CMakeLists.txt

cmake_minimum_required(VERSION 3.16)

project(ArrowTutorialExamples)

find_package(Arrow REQUIRED)
find_package(ArrowDataset)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_BUILD_TYPE Release)

message(STATUS "Arrow version: ${ARROW_VERSION}")
message(STATUS "Arrow SO version: ${ARROW_FULL_SO_VERSION}")

# add_executable(arrow_example arrow_example.cc)
# target_link_libraries(arrow_example PRIVATE Arrow::arrow_shared)

# add_e
### 如何读写处理 Apache Arrow 文件 Apache Arrow 是一种跨平台的列式内存格式,旨在加速大数据交互和内存处理。它支持多种编程语言,并提供了高效的文件读写功能。以下是有关如何使用 Apache Arrow 文件格式进行读写的详细介绍。 #### 1. 安装依赖 为了能够操作 Arrow 文件,需要安装相应的。对于 Python 用户来说,可以使用 `pyarrow` 来实现这一目标。通过以下命令安装: ```bash pip install pyarrow ``` 如果是在 Java 环境下,则可以通过 Maven 或 Gradle 添加依赖项[^1]。 #### 2. 创建并写入 Arrow 文件 下面是一个简单的例子,展示如何创建一个 Arrow 表格并将数据保存到本地文件中。 ```python import pyarrow as pa # 构建表格数据 data = [ pa.array([1, 2, 3, 4]), pa.array(['foo', 'bar', 'baz', None]) ] batch = pa.RecordBatch.from_arrays(data, ['f0', 'f1']) # 将 RecordBatch 转换为 Table table = pa.Table.from_batches([batch]) # 写入 Arrow 文件 with pa.OSFile("example.arrow", "wb") as sink: with pa.ipc.new_file(sink, table.schema) as writer: writer.write_table(table) ``` 上述代码片段展示了如何构建一个包含两列的数据表 (`f0`, `f1`) 并将其写入名为 `example.arrow` 的文件中[^2]。 #### 3. 读取 Arrow 文件 要从已有的 Arrow 文件中加载数据,可按照如下方式进行操作: ```python import pyarrow as pa # 打开箭头文件 with pa.memory_map('example.arrow', 'r') as source: reader = pa.ipc.open_file(source) # 获取整个表格 table = reader.read_all() print(table.to_pandas()) ``` 此部分演示了打开之前生成的 Arrow 文件,并将其中的内容转换成 Pandas DataFrame 显示出来。 #### 4. 关于序列化机制的选择原因 Arrow 使用 FlatBuffers 对其 IPC (Inter-Process Communication) 格式的元数据信息进行了序列化。之所以采用这种方式是因为 FlatBuffers 提供了一种高效的方法,在不解析的情况下访问嵌套结构体字段的能力,从而减少了延迟时间以及提高了性能表现[^3]。 #### 5. 数据存储形式之间的权衡 当考虑优化磁盘空间或者提高查询效率时,通常会面临两种不同的需求: - **Parquet**: 更适合用于压缩后的长期存储方案; - **Arrow**: 则更倾向于实时计算场景下的快速数据交换与检索过程[^4]。 因此,在实际应用过程中需根据具体业务场景做出合理选择。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云金杞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值