跳到內容

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()

請參閱python 整合文章以取得有關設定 pyarrow 的更多詳細資訊。

範例

該套件包含用於啟動基於 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 物件的更多資訊,請參閱關於資料整理的文章。

延伸閱讀