跳过内容

Arrow Flight 是一个通用客户端-服务器框架,用于通过网络接口高性能传输大型数据集,作为 Apache Arrow 项目的一部分构建。它通过多种方式实现高效数据传输:

  • Flight 消除了数据传输过程中反序列化的需要。
  • Flight 允许并行数据流传输。
  • Flight 采用了专门的优化,以充分利用 Arrow 的列式格式。

arrow 包提供了连接到 Flight 服务器以发送和接收数据的方法。

先决条件

目前,R 中的 arrow 包不提供独立的 Arrow Flight 实现:它通过调用 PyArrow 提供的 Flight 方法(Python)来工作,并且需要安装 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 对象的更多信息,请参阅数据整理文章。

进一步阅读