Arrow Flight 是一个通用的客户端-服务器框架,用于通过网络接口高性能传输大型数据集,它是 Apache Arrow 项目的一部分。 它允许通过多种方式进行高效的数据传输
- Flight 消除了数据传输期间反序列化的需要。
- Flight 允许并行数据流。
- Flight 采用优化设计,以利用 Arrow 的列式格式。
arrow 包提供了连接到 Flight 服务器以发送和接收数据的方法。
先决条件
目前,R 中的 arrow 包不提供 Arrow Flight 的独立实现:它通过调用 Python 的 PyArrow 提供的 Flight 方法 来工作,并且需要安装 reticulate 包和 Python PyArrow 库。 如果您是第一次使用它们,您可以像这样安装它们
install.packages("reticulate")
arrow::install_pyarrow()
有关设置 pyarrow 的更多详细信息,请参阅python 集成文章。
示例
该软件包包含启动基于 Python 的 Flight 服务器的方法,以及连接到在其他地方运行的 Flight 服务器的方法。 为了说明这两个方面,在一个 R 进程中,我们将启动一个演示服务器
library(arrow)
demo_server <- load_flight_server("demo_flight_server")
server <- demo_server$DemoFlightServer(port = 8089)
server$serve()
我们将让它运行。
在另一个 R 进程中,让我们连接到它并将一些数据放入其中。
library(arrow)
client <- flight_connect(port = 8089)
flight_put(client, iris, path = "test_data/iris")
现在,在另一个 R 进程中,我们可以连接到服务器并提取我们放入的数据
library(arrow)
library(dplyr)
client <- flight_connect(port = 8089)
client %>%
flight_get("test_data/iris") %>%
group_by(Species) %>%
summarize(max_petal = max(Petal.Length))
## # A tibble: 3 x 2
## Species max_petal
## <fct> <dbl>
## 1 setosa 1.9
## 2 versicolor 5.1
## 3 virginica 6.9
因为 flight_get()
返回一个 Arrow 数据结构,您可以直接将其结果管道传输到 dplyr 工作流程中。 有关通过 dplyr 接口使用 Arrow 对象的更多信息,请参阅有关数据整理的文章。
进一步阅读
- Flight 远程过程调用协议的规范在 Arrow 项目主页上列出
- Arrow C++ 文档包含 最佳实践的列表,适用于 Arrow Flight。
- 在 Apache Arrow Python Cookbook 中提供了一个 Python 中 Arrow Flight 服务器的详细工作示例。