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 物件的更多資訊,請參閱關於資料整理的文章。
延伸閱讀
- Flight 遠端程序呼叫協定的規範列在 Arrow 專案首頁上
- Arrow C++ 文件包含 Arrow Flight 的 最佳實踐列表。
- Apache Arrow Python Cookbook 中提供了 Python 中 Arrow Flight 伺服器的詳細工作範例。