更新日誌
來源:NEWS.md
arrow 17.0.0
CRAN 發布:2024-08-17
新功能
- 使用者編寫的 R 函數若使用 Arrow 在資料集查詢中支援的函數,現在也可以在查詢中使用。先前,只有使用算術運算子的函數才能運作。例如,
time_hours <- function(mins) mins / 60
可以運作,但time_hours_rounded <- function(mins) round(mins / 60)
無法運作;現在兩者都可以運作。這些是自動翻譯而非真正的使用者定義函數 (UDF);如需 UDF,請參閱register_scalar_function()
。 (#41223) -
mutate()
表達式現在可以包含聚合,例如x - mean(x)
。 (#41350) -
summarize()
支援更複雜的表達式,並正確處理在表達式中重複使用欄位名稱的情況。 (#41223) - 現在支援
dplyr::*_join()
函數的na_matches
引數。此引數控制在聯結時是否將NA
值視為相等。 (#41358) - R 中繼資料儲存在 Arrow 結構描述中,以支援 R 和 Arrow/Parquet 之間往返資料,現在以更嚴格的方式序列化和反序列化。這使得從未知來源將檔案中的資料載入 R data.frames 更安全。 (#41969)
arrow 16.1.0
CRAN 發布:2024-05-25
次要改進與修正
- 資料集和表格輸出列印現在會截斷長度超過 20 個項目的結構描述 (#38916)
- 修正最新 reticulate 的指標轉換為 Python 的問題,以確保資料可以在 Arrow 和 PyArrow 之間傳遞 (#39969)
- 檢查 macOS 上是否正在使用 GNU libtool,並確保我們改用 macOS libtool (#40259)
- 修正建立包含所有相依性的捆綁 tarball 在 Windows 上失敗的錯誤 (@hutch3232, #40232)
arrow 15.0.1
CRAN 發布:2024-03-12
次要改進與修正
- 當 ARROW_OFFLINE_BUILD=true 時,不要下載 cmake,並更新
SystemRequirements
(#39602)。 - 如果二進位檔下載失敗,則優雅地回退到來源建置 (#39587)。
- 當
sub
、gsub
、stringr::str_replace
、stringr::str_replace_all
在pattern
中傳遞長度 > 1 的值向量時,現在會擲回錯誤,而不是警告並將資料提取到 R 中 (@abfleishman, #39219)。 - 遺失的文件已新增至
?open_dataset
,說明如何使用 arrow 13.0.0 中新增的 ND-JSON 支援 (@Divyansh200102, #38258)。 - 為了在使用 arrow 與 AWS S3 (例如,
s3_bucket
、S3FileSystem
) 時更容易偵錯問題,可以使用AWS_S3_LOG_LEVEL
環境變數設定 S3 的偵錯日誌層級。如需更多資訊,請參閱?S3FileSystem
。 (#38267) - 使用 arrow 與 duckdb (即,
to_duckdb()
) 不再導致在結束 R 會話時發出警告。 (#38495) - 修正了大量次要拼字錯誤 (@jsoref, #38929, #38257)
- 開發人員文件已更新以符合最近發布版本中的變更 (#38220)
arrow 14.0.0
CRAN 發布:2023-11-16
新功能
- 讀取分割的 CSV 資料集並為
open_dataset()
提供結構描述時,分割變數現在包含在結果資料集中 (#37658)。 - 新函數
write_csv_dataset()
現在包裝write_dataset()
並鏡像write_csv_arrow()
的語法 (@dgreiss, #36436)。 -
open_delim_dataset()
現在接受quoted_na
引數,以將空字串剖析為 NA 值 (#37828)。 -
現在可以在
data.frame
物件上呼叫schema()
以檢索其推斷的 Arrow 結構描述 (#37843)。 - 現在可以透過資料集讀取函數和新函數
read_csv2_arrow()
讀取以逗號或其他字元作為小數點符號的 CSV (#38002)。
次要改進與修正
CsvParseOptions
物件建立的文件現在包含更多關於預設值的資訊 (@angela-li, #37909)。- 修正了在配置失敗後可能導致從非 R 執行緒呼叫 R 程式碼的程式碼路徑 (#37565)。
- 修正了無法從 R 連線讀取大型 Parquet 檔案的錯誤 (#37274)。
- stringr 輔助函數 (例如,
fixed()
、regex()
等) 的綁定現在允許在其引數中可靠地使用變數 (#36784)。 - Thrift 字串和容器大小限制現在可以透過新公開的
ParquetReaderProperties
進行配置,允許使用者處理具有異常大型中繼資料的 Parquet 檔案 (#36992)。 - 改進了使用
add_filename()
產生的錯誤訊息 (@amoeba, #37372)。
安裝
- macOS 建置現在使用與 Linux 相同的安裝路徑 (@assignUser, #37684)。
- 當在 macOS 上模擬執行 (即,在 M1/aarch64 上使用 x86 安裝的 R;#37777) 時,套件載入時現在會發出警告訊息。
- 在配置和安裝期間執行的 R 指令碼現在使用正確的 R 直譯器執行 (@meztez, #37225)。
- 失敗的 libarrow 建置現在傳回更詳細的輸出 (@amoeba, #37727)。
-
create_package_with_all_dependencies()
現在正確跳脫 Windows 上的路徑 (#37226)。
arrow 13.0.0
CRAN 發布:2023-08-30
重大變更
- 僅從
data.frame
繼承且沒有其他類別的輸入物件現在已移除class
屬性,導致現在從檔案讀取函數和arrow_table()
始終傳回 tibble,這會導致傳回物件類型的一致性。在 Arrow 表格物件上呼叫as.data.frame()
現在始終傳回data.frame
物件 (#34775)
新功能
-
open_dataset()
現在適用於 ND-JSON 檔案 (#35055) - 在多個 Arrow 物件上呼叫
schema()
現在會傳回物件的結構描述 (#35543) - dplyr
.by
/by
引數現在在 dplyr 動詞的 arrow 實作中受到支援 (@eitsupi, #35667) dplyr::case_when()
的綁定現在接受.default
參數,以符合 dplyr 1.1.0 中的更新 (#35502)
次要改進與修正
- 便利函數
arrow_array()
可用於建立 Arrow 陣列 (#36381) - 便利函數
scalar()
可用於建立 Arrow 純量 (#36265) - 透過始終從主 R 執行緒從 DuckDB 呼叫
RecordBatchReader::ReadNext()
,防止在 arrow 和 duckdb 之間傳遞資料時發生崩潰 (#36307) - 針對
set_io_thread_count()
發出警告,其中num_threads
< 2 (#36304) - 確保遺失的分組變數新增至變數列表的開頭 (#36305)
- CSV 檔案讀取器選項類別物件可以列印選定的值 (#35955)
- 結構描述中繼資料可以設定為具名字元向量 (#35954)
- 確保 RStringViewer 輔助類別不擁有任何陣列參考 (#35812)
-
如果
%z
是格式字串的一部分,則 arrow 中的strptime()
將傳回時區感知時間戳記 (#35671) - 組合
group_by()
和across()
時的欄位排序現在與 dplyr 相符 (@eitsupi, #35473)
arrow 12.0.0
CRAN 發布:2023-05-05
新功能
read_parquet()
和read_feather()
函數現在可以接受 URL 引數 (#33287, #34708)。GcsFileSystem$create()
中的json_credentials
引數現在接受包含適當驗證權杖的檔案路徑 (@amoeba, #34421, #34524)。- 現在可以檢查
GcsFileSystem
物件的$options
成員 (@amoeba, #34422, #34477)。 read_csv_arrow()
和read_json_arrow()
函數現在接受以I()
包裝的文字輸入,以提高與readr::read_csv()
的相容性 (@eitsupi, #18487, #33968)。- 現在可以使用 dplyr 表達式中的
$
和[[
存取巢狀欄位 (#18818, #19706)。
次要改進與修正
- 修正與最終確定 S3 檔案系統元件相關的程序結束時發生的崩潰 (#15054, #33858)。
- 實作 Arrow C++
FetchNode
和OrderByNode
以提高效能並簡化從 dplyr 表達式建置查詢計畫 (#34437, #34685)。 - 修正了取決於
arrow_table()
中細微引數傳遞語義而寫入不同 R 中繼資料的錯誤 (#35038, #35039)。 - 改進嘗試將具有
NULL
欄位名稱的data.frame
轉換為Table
時的錯誤訊息 (#15247, #34798)。 - 範例小品已更新,以反映
open_csv_dataset()
系列函數的改進 (#33998, #34710)。 - 修正了當 arrow ALTREP 向量被實例化並轉換回 arrow 陣列時發生的崩潰 (#34211, #34489)。
- 改進 conda 安裝指示 (#32512, #34398)。
- 改進文件 URL 配置 (@eitsupi, #34276)。
- 更新遷移到 GitHub 的 JIRA 問題的連結 (@eitsupi, #33631, #34260)。
dplyr::n()
函數現在對應到count_all
核心,以提高效能並簡化 R 實作 (#33892, #33917)。- 改進使用
s3_bucket()
檔案系統輔助函數與endpoint_override
的體驗,並修正當傳遞某些引數組合時發生的令人驚訝的行為 (@cboettig, #33904, #34009)。 - 如果在
open_csv_dataset()
中提供schema
且col_names = TRUE
,則不會引發錯誤 (#34217, #34092)。
arrow 11.0.0.3
CRAN 發布:2023-03-08
次要改進與修正
-
open_csv_dataset()
允許指定結構描述。 (#34217) - 為了確保與即將發布的 dplyr 版本相容,我們不再呼叫
dplyr:::check_names()
(#34369)
arrow 11.0.0.2
CRAN 發布:2023-02-12
重大變更
-
map_batches()
預設為延遲載入;除非lazy = FALSE
,否則現在傳回RecordBatchReader
而非RecordBatch
物件清單。 (#14521)
新功能
文件
- 對許多範例小品和 README 進行了大量的重新組織、重寫和新增。 (@djnavarro, #14514)
讀取/寫入資料
- 新函數
open_csv_dataset()
、open_tsv_dataset()
和open_delim_dataset()
都包裝open_dataset()
- 它們不提供新功能,但允許提供 readr 樣式的選項,從而簡化了在個別檔案讀取和資料集功能之間切換。 (#33614) - 使用者定義的 null 值可以在寫入 CSV 時設定為資料集和個別檔案。 (@wjones127, #14679)
- 新的
col_names
參數允許在開啟 CSV 資料集時指定欄位名稱。 (@wjones127, #14705) - 用於讀取個別檔案 (
read_*_arrow()
函數) 和資料集 (open_dataset()
和新的open_*_dataset()
函數) 的parse_options
、read_options
和convert_options
參數可以作為列表傳遞。 (#15270) read_csv_arrow()
可以讀取包含重音符號的檔案路徑。 (#14930)
dplyr 相容性
- 新的 dplyr (1.1.0) 函數
join_by()
已針對 Arrow 物件上的 dplyr 聯結實作 (僅限相等條件)。 (#33664) - 當使用多個
dplyr::group_by()
/dplyr::summarise()
呼叫時,輸出是準確的。 (#14905) -
dplyr::summarize()
在除數為變數時可與除法運算搭配使用。 (#14933) -
dplyr::right_join()
正確合併索引鍵。 (#15077) - 多項變更以確保與 dplyr 1.1.0 相容。 (@lionel-, #14948)
arrow 10.0.0
CRAN 發布:2022-10-26
Arrow dplyr 查詢
多個新函數可用於查詢
-
dplyr::across()
可用於跨多個欄位應用相同的計算,且where()
選擇輔助函數在across()
中受到支援; -
add_filename()
可用於取得列的來源檔案名稱(僅在查詢?Dataset
時可用); - 在
slice_*
系列中新增五個函數:dplyr::slice_min()
、dplyr::slice_max()
、dplyr::slice_head()
、dplyr::slice_tail()
和dplyr::slice_sample()
。
此套件現在具有文件,列出 Arrow 資料上支援的所有 dplyr
方法和 R 函數對應,以及關於在 R 中評估的查詢與在 Acero(Arrow 查詢引擎)中評估的查詢之間的功能差異的注意事項。請參閱 ?acero
。
針對聯結實作了一些新功能和錯誤修正
- 聯結現在支援擴展陣列,例如,允許聯結包含 geoarrow 資料的資料集。
- 現在支援
keep
引數,允許在聯結輸出中為左側和右側聯結鍵使用不同的欄位。完整聯結現在會合併聯結鍵(當keep = FALSE
時),避免在右側的列中,若在左側沒有任何符合項時,聯結鍵將全部為NA
的問題。
一些變更旨在提高 API 的一致性
- 在未來的版本中,預設情況下,呼叫
dplyr::pull()
將傳回?ChunkedArray
而非 R 向量。目前預設行為已被棄用。若要立即更新為新行為,請指定pull(as_vector = FALSE)
或全域設定options(arrow.pull_as_vector = FALSE)
。 - 在分組的查詢上呼叫
dplyr::compute()
會傳回?Table
而非查詢物件。
最後,現在可以取消長時間執行的查詢,並將立即中止其計算。
陣列和表格
as_arrow_array()
現在可以接受 blob::blob
和 ?vctrs::list_of
,分別轉換為二進制和列表陣列。此外,修正了當傳遞 StructArray
時,as_arrow_array()
忽略類型引數的問題。
unique()
函數適用於 ?Table
、?RecordBatch
、?Dataset
和 ?RecordBatchReader
。
讀取和寫入
write_feather()
可以接受 compression = FALSE
以選擇寫入未壓縮的檔案。
此外,write_dataset()
中 IPC 檔案的重大變更:將 "ipc"
或 "feather"
傳遞至 format
現在將寫入具有 .arrow
副檔名的檔案,而非 .ipc
或 .feather
。
安裝
從 10.0.0 版開始,arrow
需要 C++17 才能建置。這表示
- 在 Windows 上,您需要
R >= 4.0
。9.0.0 版是最後一個支援 R 3.6 的版本。 - 在 CentOS 7 上,您可以建置最新版本的
arrow
,但您首先需要安裝比預設系統編譯器 gcc 4.8 更新的編譯器。請參閱vignette("install", package = "arrow")
以取得指引。請注意,您只需要較新的編譯器來建置arrow
:安裝二進制套件(如從 RStudio Package Manager)或載入您已安裝的套件,使用系統預設值即可正常運作。
arrow 9.0.0
CRAN 發布:2022-08-10
Arrow dplyr 查詢
- 新的 dplyr 動詞
-
dplyr::union
和dplyr::union_all
(#13090) -
dplyr::glimpse
(#13563) -
show_exec_plan()
可以新增至 dplyr 管線的末端,以顯示底層計畫,類似於dplyr::show_query()
。dplyr::show_query()
和dplyr::explain()
也可運作並顯示相同的輸出,但未來可能會變更。 (#13541)
-
- 查詢中支援使用者定義函數。使用
register_scalar_function()
來建立它們。 (#13397) -
map_batches()
傳回RecordBatchReader
,且要求其對應的函數傳回可透過as_record_batch()
S3 函數強制轉換為RecordBatch
的內容。如果傳遞.lazy = TRUE
,它也可以串流方式執行。 (#13170, #13650) - 可以在查詢中呼叫具有套件命名空間前綴的函數(例如
stringr::
、lubridate::
)。例如,stringr::str_length
現在將分派到與str_length
相同的核心。 (#13160) - 支援新函數
-
lubridate::parse_date_time()
日期時間解析器: (#12589, #13196, #13506)-
支援具有年、月、日、時、分和秒組件的
orders
。 - Arrow 綁定中的
orders
引數運作方式如下:orders
會轉換為formats
,然後依序套用formats
。沒有select_formats
參數,也不會發生推斷(如同lubridate::parse_date_time()
中的情況)。
-
支援具有年、月、日、時、分和秒組件的
-
lubridate
日期和日期時間解析器,例如lubridate::ymd()
、lubridate::yq()
和lubridate::ymd_hms()
(#13118, #13163, #13627) -
lubridate::fast_strptime()
(#13174) -
lubridate::floor_date()
、lubridate::ceiling_date()
和lubridate::round_date()
(#12154) -
strptime()
支援tz
引數以傳遞時區。 (#13190) -
lubridate::qday()
(季度中的第幾天) -
exp()
和sqrt()
。 (#13517)
-
- 錯誤修正
讀取和寫入
- 新增了新函數
read_ipc_file()
和write_ipc_file()
。這些函數幾乎與read_feather()
和write_feather()
相同,但不同之處在於它們僅針對 IPC 檔案(Feather V2 檔案),而非 Feather V1 檔案。 -
自 1.0.0 版(2020 年 7 月)起已棄用的
read_arrow()
和write_arrow()
已移除。請改為使用read_ipc_file()
和write_ipc_file()
處理 IPC 檔案,或使用read_ipc_stream()
和write_ipc_stream()
處理 IPC 流。 (#13550) -
write_parquet()
現在預設寫入 Parquet 格式版本 2.4(原為 1.0)。先前已棄用的引數properties
和arrow_properties
已移除;如果您需要直接處理這些較低層級的屬性物件,請使用ParquetFileWriter
,write_parquet()
會包裝ParquetFileWriter
。 (#13555) - UnionDatasets 可以統一具有不同綱要的多個 InMemoryDatasets 的綱要。 (#13088)
-
write_dataset()
再次保留所有綱要元數據。在 8.0.0 版中,它會捨棄大多數元數據,從而破壞 sfarrow 等套件。 (#13105) - 讀取和寫入函數(例如
write_csv_arrow()
)將在檔案路徑包含壓縮副檔名(例如"data.csv.gz"
)時自動(解)壓縮資料。這在本地以及 S3 和 GCS 等遠端檔案系統上都適用。 (#13183) -
可以將
FileSystemFactoryOptions
提供給open_dataset()
,讓您可以傳遞選項,例如要忽略哪些檔案前綴。 (#13171) - 預設情況下,
S3FileSystem
不會建立或刪除儲存桶。若要啟用該功能,請傳遞組態選項allow_bucket_creation
或allow_bucket_deletion
。 (#13206) -
GcsFileSystem
和gs_bucket()
允許連線至 Google Cloud Storage。 (#10999, #13601)
封裝
- R 套件和預先建置的 libarrow 二進制檔案的每夜建置的
arrow.dev_repo
現在是 https://nightlies.apache.org/arrow/r/。 - macOS 二進制檔案隨附 Brotli 和 BZ2。Windows 二進制檔案隨附 BZ2。 (#13484)
arrow 8.0.0
CRAN 發布:2022-05-09
dplyr 和資料集的增強功能
-
open_dataset()
:- 正確支援
skip
引數,以跳過 CSV 資料集中的標頭列。 - 可以接受具有不同綱要的資料集列表,並嘗試統一綱要以產生
UnionDataset
。
- 正確支援
- Arrow dplyr 查詢
- 在
RecordBatchReader
上受到支援。例如,這允許將 DuckDB 的結果串流回 Arrow,而不是在繼續管線之前將其具體化。 - 如果查詢包含聚合或聯結,則不再需要在寫入資料集之前具體化整個結果表格。
- 支援
dplyr::rename_with()
。 -
dplyr::count()
傳回未分組的資料框架。
- 在
-
write_dataset()
在寫入分區資料集時,具有更多選項可控制列組和檔案大小,例如max_open_files
、max_rows_per_file
、min_rows_per_group
和max_rows_per_group
。 -
write_csv_arrow()
接受Dataset
或 Arrow dplyr 查詢。 - 聯結一個或多個資料集,同時
option(use_threads = FALSE)
不再使 R 崩潰。預設情況下,Windows 上會設定該選項。 -
dplyr
聯結支援suffix
引數,以處理欄位名稱中的重疊。 - 使用
is.na()
過濾 Parquet 資料集不再遺漏任何列。 -
map_batches()
正確接受Dataset
物件。
日期和時間支援的增強功能
-
read_csv_arrow()
的 readr 樣式類型T
對應到timestamp(unit = "ns")
而非timestamp(unit = "s")
。 - 對於 Arrow dplyr 查詢,新增了額外的 lubridate 功能和修正
- 新的組件提取函數
-
lubridate::tz()
(時區)、 -
lubridate::semester()
, -
lubridate::dst()
(夏令時間布林值)、 -
lubridate::date()
, -
lubridate::epiyear()
(根據流行病學週曆的年份)、
-
-
lubridate::month()
適用於整數輸入。 -
lubridate::make_date()
&lubridate::make_datetime()
+base::ISOdatetime()
&base::ISOdate()
從數值表示建立日期時間。 -
lubridate::decimal_date()
和lubridate::date_decimal()
-
lubridate::make_difftime()
(持續時間建構子) -
?lubridate::duration
輔助函數,例如lubridate::dyears()
、lubridate::dhours()
、lubridate::dseconds()
。 lubridate::leap_year()
-
lubridate::as_date()
和lubridate::as_datetime()
- 新的組件提取函數
- 同樣對於 Arrow dplyr 查詢,新增了對基礎日期和時間函數的支援和修正
-
base::difftime
和base::as.difftime()
-
base::as.Date()
轉換為日期 - Arrow 時間戳記和日期陣列支援
base::format()
-
strptime()
在格式不符的情況下傳回NA
而非錯誤,如同base::strptime()
。
-
- 如果也安裝了 tzdb 套件,則 Windows 上支援時區操作。
擴展性
- 新增了 S3 通用轉換函數,例如
as_arrow_array()
和as_arrow_table()
,用於主要的 Arrow 物件。這包括 Arrow 表格、記錄批次、陣列、分塊陣列、記錄批次讀取器、綱要和資料類型。這允許其他套件定義從其類型到 Arrow 物件的自訂轉換,包括擴展陣列。 - 可以建立和註冊自訂 擴展類型和陣列,允許其他套件定義自己的陣列類型。擴展陣列包裝了規則的 Arrow 陣列類型,並提供自訂的行為和/或儲存。請參閱描述和
?new_extension_type
的範例。 - 為所有
vctrs::vec_is()
傳回 TRUE 的物件(即,任何可用作tibble::tibble()
中欄位的物件)實作了通用擴展類型和 as_arrow_array() 方法,前提是底層的vctrs::vec_data()
可以轉換為 Arrow 陣列。
串聯支援
可以輕鬆串聯 Arrow 陣列和表格
- 可以使用
concat_arrays()
串聯陣列,或者,如果需要零複製且可接受分塊,則可以使用ChunkedArray$create()
。 - 可以使用
c()
串聯 ChunkedArrays。 - RecordBatches 和 Tables 支援
cbind()
。 - Tables 支援
rbind()
。也提供了concat_tables()
以串聯表格,同時統一綱要。
其他細微改進與修正
- 字典陣列在轉換為 R 因子時支援使用 ALTREP。
- 數學群組泛型是針對 ArrowDatum 實作的。這表示您可以將基礎函數(如
sqrt()
、log()
和exp()
)與 Arrow 陣列和純量搭配使用。 -
read_*
和write_*
函數支援 R 連線物件,以進行檔案的讀取和寫入。 - Parquet 改進
- Parquet 寫入器支援 Duration 類型欄位。
- 資料集 Parquet 讀取器消耗較少的記憶體。
-
median()
和quantile()
將僅警告一次關於近似計算,無論互動性如何。 -
Array$cast()
可以將 StructArrays 轉換為另一個 struct 類型,該類型具有相同的欄位名稱和結構(或欄位的子集),但欄位類型不同。 - 移除了 Solaris 的特殊處理。
- CSV 寫入器在寫入字串欄位時速度更快。
- 修正了
set_io_thread_count()
會設定 CPU 計數而非 IO 執行緒計數的問題。 -
RandomAccessFile
具有$ReadMetadata()
方法,可提供檔案系統提供的實用元數據。 -
grepl
綁定針對NA
輸入傳回FALSE
(先前傳回NA
),以符合base::grepl()
的行為。 -
create_package_with_all_dependencies()
在 Windows 和 Mac OS 上運作,而非僅限 Linux。
arrow 7.0.0
CRAN 發布:2022-02-10
dplyr 和資料集的增強功能
- 額外的 lubridate 功能:已實作
week()
、更多is.*()
函數和month()
的 label 引數。 summarize()
內更複雜的表達式(例如ifelse(n() > 1, mean(y), mean(z))
)受到支援。- 在 dplyr 管線中新增欄位時,現在可以使用
tibble
和data.frame
分別建立 tibble 或 data.frame 的欄位(例如... %>% mutate(df_col = tibble(a, b)) %>% ...
)。 coalesce()
內部支援字典欄位(Rfactor
類型)。-
open_dataset()
在讀取 Hive 樣式分區檔案時,即使不是必需的,也接受partitioning
引數。 - 已還原用於資料集自訂操作的實驗性
map_batches()
函數。
CSV
- 現在可以讀取具有 UTF 以外編碼的分隔符號檔案(包括 CSV)(在讀取時使用
encoding
引數)。 -
open_dataset()
正確忽略 CSV 中的位元組順序記號 (BOM),這對於讀取單個檔案而言已經是事實 - 讀取資料集在內部預設使用非同步掃描器,這解決了在讀取大型 CSV 資料集時的潛在死鎖。
-
head()
不再在大型 CSV 資料集上停止回應。 - 當檔案中的標頭與作為引數提供的綱要/欄位名稱之間存在衝突時,會顯示改進的錯誤訊息。
-
write_csv_arrow()
現在遵循readr::write_csv()
的簽名。
其他細微改進與修正
- 許多使用說明文件都經過重新組織、重新架構和擴展,以提高其實用性和清晰度。
- 可以使用
schema
或type
上的$code()
方法存取產生綱要(和個別資料類型規範)的程式碼。這讓您可以輕鬆取得從已具有綱要的物件建立綱要所需的程式碼。 - Arrow
Duration
類型已對應到 R 的difftime
類別。 - 支援
decimal256()
類型。decimal()
函數已修訂為根據precision
引數的值呼叫decimal256()
或decimal128()
。 -
write_parquet()
使用對chunk_size
的合理猜測,而非總是寫入單個區塊。這提高了讀取和寫入大型 Parquet 檔案的速度。 -
write_parquet()
不再捨棄分組 data.frames 的屬性。 - 現在使用 ALTREP 支援分塊陣列。
- 由 Arrow 陣列支援的 ALTREP 向量不再因排序或否定而意外地突變。
- 可以使用
proxy_options
建立 S3 檔案系統。 - 修正了建立 S3 檔案系統時的區段錯誤。
- Arrow 中的整數除法更符合 R 的行為。
安裝
- 預設情況下,原始碼建置現在使用
pkg-config
搜尋系統依賴項(例如libz
),並在存在時連結到它們。此新預設值將使在已安裝這些依賴項的系統上更快地從原始碼建置 Arrow。若要保留下載和建置所有依賴項的先前行為,請設定ARROW_DEPENDENCY_SOURCE=BUNDLED
。 - Linux 建置中預設啟用 Snappy 和 lz4 壓縮函式庫。這表示 Arrow 的預設建置(不設定任何環境變數)將能夠讀取和寫入 snappy 編碼的 Parquet 檔案。
- Windows 二進制套件包含 brotli 壓縮支援。
- Windows 上的 Arrow 建置可以找到本地建置的 libarrow 函式庫。
- 此套件在 Raspberry Pi OS 上編譯和安裝。
arrow 6.0.1
CRAN 發布:2021-11-20
- 現在的 Join 支援包含字典欄位,並且已修復多個崩潰問題
- 當處理已篩選至 0 列的資料時,群組聚合不再崩潰
- 在 dplyr 查詢中新增了
str_count()
的綁定 - 解決了 AWS SDK for C++ 中的一個嚴重錯誤,該錯誤可能會影響 S3 多部分上傳
- 已解決 round 核心中的 UBSAN 警告
- 修復了在 Solaris 和舊版本 macOS 上的建置失敗問題
arrow 6.0.0
現在有兩種方法可以查詢 Arrow 資料
1. 擴展的 Arrow 原生查詢:聚合和 Join
dplyr::summarize()
,無論是群組還是非群組,現在都已為 Arrow Datasets、Tables 和 RecordBatches 實作。由於資料是以區塊掃描,您可以對由多個檔案支援的大於記憶體的資料集進行聚合。支援的聚合函數包括 n()
、n_distinct()
、 min()
、max()
、sum()
、mean()
、var()
、sd()
、any()
和 all()
。 median()
和帶有一個機率的 quantile()
也受到支援,目前使用 t-digest 演算法返回近似結果。
除了 summarize()
之外,您還可以呼叫 count()
、tally()
和 distinct()
,它們有效地包裝了 summarize()
。
此增強功能確實更改了在某些情況下 summarize()
和 collect()
的行為:請參閱下面的「重大變更」以了解詳細資訊。
除了 summarize()
之外,Arrow 原生也支援帶有 mutating 和 filtering equality 的 Join(inner_join()
、left_join()
、right_join()
、full_join()
、semi_join()
和 anti_join()
)。
在此版本中,群組聚合和(尤其是)Join 應被視為有些實驗性。我們預期它們可以運作,但對於所有工作負載,它們可能沒有得到很好的最佳化。為了幫助我們將精力集中在下一個版本中改進它們,如果您遇到意外行為或效能不佳的情況,請告知我們。
新的非聚合計算函數包括字串函數,例如 str_to_title()
和 strftime()
,以及用於提取日期部分(例如 year()
、month()
)的計算函數。 這不是額外計算函數的完整列表; 有關可用計算函數的完整列表,請參閱 list_compute_functions()
。
我們也致力於填補對所有資料類型的支援,例如 Decimal
,對於先前版本中新增的函數。 先前版本說明中提及的所有類型限制應不再有效,如果您發現某個函數未針對特定資料類型實作,請回報問題。
2. DuckDB 整合
如果您已安裝 duckdb 套件,您可以將 Arrow Dataset 或查詢物件交給 DuckDB,以使用 to_duckdb()
函數進行進一步查詢。 這允許您使用 duckdb 的 dbplyr
方法及其 SQL 介面來聚合資料。 在 to_duckdb()
之前完成的篩選和欄位投影在 Arrow 中評估,並且 duckdb 也可以將一些謂詞下推到 Arrow。 這種交接不會複製資料,而是使用 Arrow 的 C 介面(就像在 R 和 Python 之間傳遞 arrow 資料一樣)。 這表示不會產生序列化或資料複製成本。
您也可以取得 duckdb tbl
並呼叫 to_arrow()
以將資料串流到 Arrow 的查詢引擎。 這表示在單個 dplyr 管道中,您可以從 Arrow Dataset 開始,在 DuckDB 中評估一些步驟,然後在 Arrow 中評估其餘步驟。
重大變更
- 來自 Dataset 查詢的資料列順序不再是確定性的。 如果您需要穩定的排序順序,則應明確地
arrange()
查詢結果。 對於summarize()
的呼叫,您可以設定options(arrow.summarise.sort = TRUE)
以符合目前dplyr
在分組欄位上排序的行為。 -
記憶體內 Arrow Table 或 RecordBatch 上的
dplyr::summarize()
不再急切評估。 呼叫compute()
或collect()
以評估查詢。 -
head()
和tail()
也都不再急切評估,無論是對於記憶體內資料還是對於 Datasets。 此外,由於資料列順序不再是確定性的,除非您arrange()
指定排序,否則它們實際上會從資料集中的某個位置給您一個隨機的資料切片。 - Simple Feature (SF) 欄位在轉換為 Arrow 表格(以及因此儲存到 Parquet 或 Feather 時)不再儲存其所有中繼資料。 這也包括任何在每個元素上都有屬性的資料框架欄位(換句話說:列級中繼資料)。 我們先前儲存此中繼資料的方法在 Arrow 查詢 + 資料集方面既(計算上)效率低下且不可靠。 這將對儲存 SF 欄位產生最大的影響。 對於儲存這些欄位,我們建議將欄位轉換為眾所周知的二進位表示形式(使用
sf::st_as_binary(col)
)或使用 sfarrow 套件,該套件處理此轉換過程的一些複雜性。 我們計劃改進此功能並在未來重新啟用像這樣自訂的中繼資料,屆時我們可以以安全有效的方式實作儲存。 如果您需要保留儲存此中繼資料的 6.0.0 之前的行為,您可以設定options(arrow.preserve_row_level_metadata = TRUE)
。 我們將在即將發布的版本中移除此選項。 如果可能,我們強烈建議避免使用此變通方法,因為未來將不支援這些結果,並且可能會導致令人驚訝和不準確的結果。 如果您遇到除 sf 欄位之外的自訂類別受到此影響,請回報問題。 - Datasets 在 R < 4.0 (Rtools 3.5) 的 32 位元 Windows 上已正式不再支援。 32 位元 Windows 使用者應升級到較新版本的 R 才能使用 datasets。
在 Linux 上安裝
- 如果 Arrow C++ 程式庫未編譯,則套件安裝現在會失敗。 在以前的版本中,如果 C++ 程式庫編譯失敗,您會得到一個成功的 R 套件安裝,但它不會執行太多有用的操作。
- 您可以通過設定環境變數
LIBARROW_MINIMAL=true
在從原始碼建置時停用所有可選的 C++ 組件。 這將具有核心 Arrow/Feather 組件,但不包括 Parquet、Datasets、壓縮程式庫和其他可選功能。 - 原始碼套件現在捆綁了 Arrow C++ 原始碼,因此不必下載即可建置套件。 由於包含原始碼,因此現在可以在離線/氣隙系統上建置套件。 預設情況下,離線建置將是最小化的,因為它無法下載支援所有功能所需的第三方 C++ 相依性。 為了允許功能完整的離線建置,包含的
create_package_with_all_dependencies()
函數(也可在 GitHub 上取得,無需安裝 arrow 套件)將下載所有第三方 C++ 相依性並將它們捆綁在 R 原始碼套件中。 在連接到網路的系統上執行此函數以產生「胖」原始碼套件,然後將該 .tar.gz 套件複製到您的離線機器並安裝。 特別感謝 @karldw 在這方面付出的巨大努力。 - 原始碼建置可以通過設定
ARROW_DEPENDENCY_SOURCE=AUTO
來使用系統相依性(例如libz
)。 這不是此版本中的預設值(BUNDLED
,即下載並建置所有相依性),但可能會在未來成為預設值。 - JSON 程式庫組件(
read_json_arrow()
)現在是可選的,並且預設情況下仍然開啟; 在建置之前設定ARROW_JSON=OFF
以停用它們。
其他增強功能和修復
- 更多 Arrow 資料類型在與 R 之間轉換時使用 ALTREP。 這顯著加快了一些工作流程,而對於其他工作流程,它僅延遲了從 Arrow 到 R 的轉換。 預設情況下使用 ALTREP,但要停用它,請設定
options(arrow.use_altrep = FALSE)
-
Field
物件現在可以建立為不可為空值,並且schema()
現在可以選擇性地接受Field
的列表 - 數值除以零現在符合 R 的行為,並且不再引發錯誤
-
write_parquet()
與分組的 data.frame 一起使用時不再出錯 -
如果 Arrow 中不支援表達式,
case_when()
現在會明確地產生錯誤 -
open_dataset()
現在適用於沒有標頭列的 CSV - 修復了一個小問題,其中簡短的 readr 樣式類型
T
和t
在read_csv_arrow()
中被反轉 log(..., base = b)
的綁定,其中 b 是 2、e 或 10 以外的任何值- 對我們的 vignette 進行了許多更新和擴展
- 修復了將長度為 0 的 ChunkedArrays 轉換為 R 向量時的區段錯誤
-
Table$create()
現在具有別名arrow_table()
arrow 5.0.0
CRAN 發布:2021-07-29
更多 dplyr
-
現在有超過 250 個計算函數可用於
dplyr::filter()
、mutate()
等。 此版本中的新增功能包括- 字串運算:
strsplit()
和str_split()
;strptime()
;paste()
、paste0()
和str_c()
;substr()
和str_sub()
;str_like()
;str_pad()
;stri_reverse()
- 日期/時間運算:
lubridate
方法,例如year()
、month()
、wday()
等 - 數學:對數 (
log()
et al.); 三角函數 (sin()
、cos()
等);abs()
;sign()
;pmin()
和pmax()
;ceiling()
、floor()
和trunc()
- 條件函數,在此版本中對輸入類型有一些限制:
ifelse()
和if_else()
用於除了Decimal
類型以外的所有類型;case_when()
僅適用於邏輯、數值和時間類型;coalesce()
用於除了列表/結構以外的所有類型。 另請注意,在此版本中,因子/字典在這些函數中會轉換為字串。 -
支援
is.*
函數,並且可以在relocate()
內部使用
- 字串運算:
arrow_dplyr_query
的 print 方法現在包含表達式和由mutate()
衍生的欄位的結果類型。如果傳遞參數
.keep
、.before
或.after
,transmute()
現在會產生錯誤,以與dplyr
在data.frame
上的行為保持一致。
CSV 寫入
-
write_csv_arrow()
使用 Arrow 將 data.frame 寫入單個 CSV 檔案 -
write_dataset(format = "csv", ...)
將 Dataset 寫入 CSV,包括使用分割
C 介面
- 為其餘 C 資料介面新增了綁定:Type、Field 和 RecordBatchReader(來自實驗性 C 串流介面)。 這些也具有
reticulate::py_to_r()
和r_to_py()
方法。 隨著Scanner$ToRecordBatchReader()
方法的加入,您現在可以在 R 中建立 Dataset 查詢,並將產生的批次串流傳遞到流程中的另一個工具。 - C 介面方法在 Arrow 物件上公開(例如
Array$export_to_c()
、RecordBatch$import_from_c()
),類似於它們在pyarrow
中的方式。 這有助於它們在其他套件中的使用。 有關用法範例,請參閱py_to_r()
和r_to_py()
方法。
其他增強功能
- 將 R
data.frame
轉換為 ArrowTable
在各個欄位之間使用多執行緒 - 某些 Arrow 陣列類型在轉換為 R 時現在使用 ALTREP。 要停用此功能,請設定
options(arrow.use_altrep = FALSE)
-
is.na()
現在在浮點數欄位中的NaN
值上評估為TRUE
,以與基本 R 保持一致。 -
is.nan()
現在在浮點數欄位中的NA
值上評估為FALSE
,在非浮點數欄位中的所有值上評估為FALSE
,以與基本 R 保持一致。 Array
、ChunkedArray
、RecordBatch
和Table
的其他方法:na.omit()
和其友善函數、any()
/all()
- Scalar 輸入到
RecordBatch$create()
和Table$create()
會被回收 -
arrow_info()
包含有關 C++ 建置的詳細資訊,例如編譯器版本 -
如果
x
不是Scalar
、Array
或ChunkedArray
,則match_arrow()
現在會將x
轉換為Array
,並且不再分派base::match()
。 - 列級中繼資料現在僅限於讀取/寫入單個 parquet 或 feather 檔案。 如果資料集包含列級中繼資料,則列級中繼資料會被忽略(並發出警告)。 寫入帶有列級中繼資料的資料集也會被忽略(並發出警告)。 我們正在開發更穩健的實作來支援列級中繼資料(和其他複雜類型)—敬請期待。 對於使用 {sf} 物件,{sfarrow} 有助於序列化 sf 欄位並將它們與 geopandas 共享。
arrow 4.0.0.1
CRAN 發布:2021-05-10
- 當在 Linux 上使用套件的靜態原始碼建置時,mimalloc 記憶體分配器是預設記憶體分配器。 這是因為它在 valgrind 下比 jemalloc 具有更好的行為。 功能完整的建置(使用
LIBARROW_MINIMAL=false
安裝)包括 jemalloc 和 mimalloc,並且它仍然將 jemalloc 作為預設值,儘管這可以使用ARROW_DEFAULT_MEMORY_POOL
環境變數在運行時配置。 - 環境變數
LIBARROW_MINIMAL
、LIBARROW_DOWNLOAD
和NOT_CRAN
現在在 Linux 建置腳本中不區分大小寫。 - macOS 二進位套件中的建置配置問題已解決。
arrow 4.0.0
CRAN 發布:2021-04-27
dplyr 方法
Arrow 物件上支援更多 dplyr
動詞
-
現在在 Arrow 中支援許多應用程式的
dplyr::mutate()
。 對於 Arrow 中尚不支援的Table
和RecordBatch
上的查詢,實作會像先前版本一樣,首先回退到將資料提取到記憶體內 Rdata.frame
。 對於Dataset
(可能大於記憶體)上的查詢,如果未實作該函數,則會引發錯誤。 無法在 Arrow 物件上呼叫的主要mutate()
功能是 (1)mutate()
在group_by()
之後(通常與聚合結合使用)和 (2) 使用dplyr::across()
的查詢。 -
dplyr::transmute()
(呼叫mutate()
) -
dplyr::group_by()
現在保留.drop
參數,並支援即時定義欄位 -
dplyr::relocate()
重新排序欄位 -
dplyr::arrange()
排序資料列 -
dplyr::compute()
評估延遲表達式並返回 Arrow Table。 這等效於dplyr::collect(as_data_frame = FALSE)
,後者是在 2.0.0 中新增的。
現在可以在 dplyr
動詞內部對 Arrow 物件呼叫超過 100 個函數
- 字串函數
nchar()
、tolower()
和toupper()
,以及它們的stringr
拼寫str_length()
、str_to_lower()
和str_to_upper()
,在 Arrowdplyr
呼叫中受到支援。 也支援str_trim()
。 - 正規表示式函數
sub()
、gsub()
和grepl()
,以及str_replace()
、str_replace_all()
和str_detect()
受到支援。 -
cast(x, type)
和dictionary_encode()
允許變更 Arrow 物件中欄位的類型;as.numeric()
、as.character()
等被公開為類似的類型變更便利功能 -
dplyr::between()
; Arrow 版本也允許left
和right
參數成為資料中的欄位,而不僅僅是純量 - 此外,任何 Arrow C++ 計算函數都可以在
dplyr
動詞內部呼叫。 這使您可以存取沒有直接 R 映射的 Arrow 函數。 有關所有可用函數,請參閱list_compute_functions()
,這些函數在dplyr
中以arrow_
為前綴提供。 - Arrow C++ 計算函數在針對具有不同類型(例如 int32 和 float64)的資料呼叫時,現在會執行更系統的類型提升。 以前,表達式中的 Scalars 始終被轉換為與相應 Array 的類型匹配,因此這種新的類型提升啟用了對資料集中兩個欄位 (Arrays) 的運算等功能。 作為副作用,不再支援在先前版本中有效的一些比較:例如,
dplyr::filter(arrow_dataset, string_column == 3)
將產生錯誤,並顯示關於數值3
和string_column
的字串類型之間類型不符的訊息。
Datasets
-
open_dataset()
現在接受檔案路徑向量(甚至單個檔案路徑)。 除此之外,這使您可以開啟單個非常大的檔案並使用write_dataset()
來分割它,而無需將整個檔案讀取到記憶體中。 - Datasets 現在可以偵測和讀取壓縮 CSV 的目錄
-
write_dataset()
現在預設為format = "parquet"
,並且更好地驗證format
參數 - 現在可以正確處理
open_dataset()
中schema
的無效輸入 - 從 Dataset 收集 0 個欄位現在不再返回所有欄位
Scanner$Scan()
方法已移除; 請使用Scanner$ScanBatches()
其他改進
-
value_counts()
用於製表Array
或ChunkedArray
中的值,類似於base::table()
。 -
StructArray
物件獲得類似 data.frame 的方法,包括names()
、$
、[[
和dim()
。 - 現在可以通過使用
$
或[[
賦值 (<-
) 來新增、取代或移除 RecordBatch 欄位 - 同樣地,現在可以通過在其中賦值新類型來編輯
Schema
。 這使得可以使用 CSV 讀取器偵測檔案的 schema,修改您想要以不同類型讀取的任何欄位的Schema
物件,然後使用該Schema
讀取資料。 - 在建立具有 schema、具有不同長度的欄位以及具有純量值回收的
Table
時,進行了更好的驗證 - 在 Windows 上的日語或其他多位元組地區設定中讀取 Parquet 檔案不再掛起(針對 libstdc++ 中的錯誤 的變通方法;感謝 @yutannihilation 在發現此問題時的堅持!)
- 如果您嘗試讀取具有嵌入 nul (
\0
) 字元的字串資料,則錯誤訊息現在會通知您可以設定options(arrow.skip_nul = TRUE)
以將它們剝離。 不建議預設設定此選項,因為此程式碼路徑明顯較慢,並且大多數字串資料不包含 nul。 -
read_json_arrow()
現在接受 schema:read_json_arrow("file.json", schema = schema(col_a = float64(), col_b = string()))
安裝和配置
- R 套件現在可以支援使用已停用其他功能(例如 dataset、parquet、字串程式庫)的 Arrow C++ 程式庫,並且捆綁的建置腳本允許設定環境變數以停用它們。 有關詳細資訊,請參閱
vignette("install", package = "arrow")
。 這允許在有用的情況下更快、更小的套件建置,並且它可以在 Solaris 上啟用最小、可運作的 R 套件建置。 - 在 macOS 上,現在可以通過設定環境變數
FORCE_BUNDLED_BUILD=true
來使用與 Linux 上預設使用的相同的捆綁 C++ 建置,以及其所有自訂參數。 -
如果可用(就像在 CRAN 二進位檔案中一樣),
arrow
現在在 macOS 上預設使用mimalloc
記憶體分配器,而不是jemalloc
。jemalloc
在 macOS 上存在 配置問題,並且 基準分析 顯示這對效能產生負面影響,尤其是在記憶體密集型工作流程中。jemalloc
仍然是 Linux 上的預設值;mimalloc
是 Windows 上的預設值。 - 當 Arrow C++ 程式庫已靜態連結時(通常是從 CRAN 安裝的情況),設定
ARROW_DEFAULT_MEMORY_POOL
環境變數以切換記憶體分配器現在可以正常運作。 arrow_info()
函數現在報告其他可選功能,以及偵測到的 SIMD 等級。 如果在建置中未啟用關鍵功能或壓縮程式庫,arrow_info()
將參考安裝 vignette,以指導如何安裝更完整的建置(如果需要)。- 如果您嘗試讀取使用您的 Arrow 建置不支援的編解碼器壓縮的檔案,則錯誤訊息現在會告訴您如何重新安裝 Arrow 並啟用該功能。
- 關於開發人員環境設定的新 vignette
vignette("developing", package = "arrow")
。 - 從原始碼建置時,您可以使用環境變數
ARROW_HOME
指向 Arrow 程式庫的特定目錄。 這類似於傳遞INCLUDE_DIR
和LIB_DIR
。
arrow 3.0.0
CRAN 發布:2021-01-27
Python 和 Flight
- Flight 方法
flight_get()
和flight_put()
(在此版本中從push_data()
重新命名)可以處理 Tables 和 RecordBatches -
flight_put()
獲得一個overwrite
參數,以選擇性地檢查是否存在具有相同名稱的資源 -
list_flights()
和flight_path_exists()
讓您能夠查看 Flight 伺服器上的可用資源 -
Schema
物件現在具有r_to_py
和py_to_r
方法 - 將表格轉換為/從 Python 轉換時,Schema metadata 會正確保留
增強功能
- 算術運算 (
+
、*
等) 在 Arrays 和 ChunkedArrays 上受到支援,並且可以用於 Arrowdplyr
管線中的篩選運算式 - 現在可以透過使用
$
或[[
賦值 (<-
) 來新增、取代或移除表格欄位 - 表格和 RecordBatch 的欄位名稱可以透過賦值
names()
來重新命名 - 大型字串類型現在可以寫入 Parquet 檔案
rlang
代名詞.data
和.env
現在在 Arrowdplyr
管線中完全受到支援。- 選項
arrow.skip_nul
(預設為FALSE
,如同base::scan()
) 允許轉換包含嵌入 nul\0
字元的 Arrow 字串 (utf8()
) 類型資料至 R。如果設定為TRUE
,則會移除 nul 字元,並且在找到任何 nul 字元時發出警告。 -
arrow_info()
提供各種執行階段和建置階段 Arrow 設定的概觀,對於偵錯很有用 - 在載入 Arrow 套件之前,設定環境變數
ARROW_DEFAULT_MEMORY_POOL
以變更記憶體配置器。Windows 套件是使用mimalloc
建置的;大多數其他套件都是使用jemalloc
(預設使用) 和mimalloc
建置的。這些替代記憶體配置器通常比系統記憶體配置器快得多,因此在可用時預設會使用它們,但有時為了偵錯目的而關閉它們會很有用。若要停用它們,請設定ARROW_DEFAULT_MEMORY_POOL=system
。 - 在建立 Arrow 表格時,現在也會包含每個元素上都有屬性的 List 欄位以及儲存的中繼資料。這允許
sf
tibbles 能夠忠實地保存和往返 (#8549)。 - 超過 100Kb 的 R 中繼資料現在會在寫入表格之前壓縮;請參閱
schema()
以取得更多詳細資訊。
錯誤修正
- 修正了在 2.0.0 版本中將 Arrow 字串類型轉換為 R 時的效能衰退問題
- C++ 函數現在會在需要時觸發垃圾回收
-
write_parquet()
現在可以寫入 RecordBatches - 從包含 0 個批次的 RecordBatchStreamReader 讀取表格不再崩潰
-
轉換為 Arrow RecordBatch 和表格時,會移除
readr
的problems
屬性,以防止大量中繼資料意外累積 (#9092) - 修正了讀取使用 Arrow 0.17 寫入的壓縮 Feather 檔案的問題 (#9128)
-
SubTreeFileSystem
獲得了有用的 print 方法,並且在列印時不再出錯
封裝和安裝
- conda
r-arrow
套件的 Nightly 開發版本可透過conda install -c arrow-nightlies -c conda-forge --strict-channel-priority r-arrow
取得 - Linux 安裝現在安全地支援較舊的
cmake
版本 - 用於啟用 S3 支援的編譯器版本檢查會正確識別作用中的編譯器
- 更新了
vignette("install", package = "arrow")
中的指南和疑難排解,特別是針對已知的 CentOS 問題 - Linux 上的作業系統偵測使用
distro
套件。如果您的作業系統未正確識別,請在那裡回報問題。
arrow 2.0.0
CRAN 發行版本:2020-10-20
資料集
-
write_dataset()
可用於寫入具有分割的 Feather 或 Parquet 檔案。請參閱vignette("dataset", package = "arrow")
結尾以取得討論和範例。 - 資料集現在具有
head()
、tail()
和 take ([
) 方法。head()
已最佳化,但其他方法可能效能不佳。 -
collect()
獲得了as_data_frame
引數,預設為TRUE
,但當FALSE
時,允許您評估累積的select
和filter
查詢,但將結果保留在 Arrow 中,而不是 Rdata.frame
中 -
read_csv_arrow()
支援指定欄位類型,包括使用Schema
和用於readr
套件中類型的精簡字串表示法。它還獲得了timestamp_parsers
引數,可讓您表達一組strptime
解析字串,這些字串將嘗試轉換指定為Timestamp
類型的欄位。
AWS S3 支援
- S3 支援現在已在二進位 macOS 和 Windows (僅限 Rtools40,即 R >= 4.0) 套件中啟用。若要在 Linux 上啟用它,您需要額外的系統相依性
libcurl
和openssl
,以及足夠現代的編譯器。請參閱vignette("install", package = "arrow")
以取得詳細資訊。 - 檔案讀取器和寫入器 (
read_parquet()
、write_feather()
等),以及open_dataset()
和write_dataset()
,允許您透過提供s3://
URI 或提供FileSystem$path()
來存取 S3 (或模擬 S3 的檔案系統) 上的資源。請參閱vignette("fs", package = "arrow")
以取得範例。 -
copy_files()
允許您以遞迴方式將檔案目錄從一個檔案系統複製到另一個檔案系統,例如從 S3 複製到本機電腦。
Flight RPC
Flight 是一個通用型用戶端-伺服器框架,用於透過網路介面高效能傳輸大型資料集。arrow
R 套件現在提供用於連接 Flight RPC 伺服器以傳送和接收資料的方法。請參閱 vignette("flight", package = "arrow")
以取得概觀。
計算
- 比較 (
==
、>
等) 和布林 (&
、|
、!
) 運算,以及is.na
、%in%
和match
(稱為match_arrow()
),現在已在 C++ 程式庫中針對 Arrow Arrays 和 ChunkedArrays 實作。 - 聚合方法
min()
、max()
和unique()
已針對 Arrays 和 ChunkedArrays 實作。 -
Arrow 表格和 RecordBatch 上的
dplyr
篩選運算式現在在 C++ 程式庫中評估,而不是透過將資料提取到 R 中並評估來完成。這產生了顯著的效能提升。 -
現在支援 Table/RecordBatch 上 dplyr 查詢的
dim()
(nrow
)
封裝和安裝
-
arrow
現在依賴cpp11
,這帶來更穩健的 UTF-8 處理和更快的編譯速度 - Linux 建置腳本現在可以在較舊版本的 R 上成功執行
- macOS 二進位套件現在隨附已啟用 zstandard 壓縮功能
錯誤修正和其他增強功能
- 當所有值都適合 R 32 位元整數時,Arrow
Int64
類型的自動轉換現在可以正確檢查 ChunkedArray 中的所有區塊,並且可以停用此轉換 (以便Int64
始終產生bit64::integer64
向量),方法是設定options(arrow.int64_downcast = FALSE)
。 - 除了在 1.0.0 中新增的往返中保留的 data.frame 欄位中繼資料之外,現在 data.frame 本身的屬性也會保留在 Arrow schema 中繼資料中。
- 檔案寫入器現在會遵循系統 umask 設定
-
ParquetFileReader
具有其他方法,可用於從檔案存取個別欄位或列群組 - 修正了各種區段錯誤:
ParquetFileWriter
中的無效輸入;來自已儲存 R 物件的無效ArrowObject
指標;將深度巢狀結構從 Arrow 轉換為 R write_parquet()
的properties
和arrow_properties
引數已棄用
arrow 1.0.1
CRAN 發行版本:2020-08-28
錯誤修正
- 使用
%in%
運算式篩選具有多個分割索引鍵的資料集現在可以忠實地傳回所有相關的列 - 資料集現在可以在根目錄中具有以
.
或_
開頭的路徑區段;以這些前置字元開頭的檔案和子目錄仍然會被忽略 -
open_dataset("~/path")
現在可以正確展開路徑 write_parquet()
的version
選項現在已正確實作- 已修正
parquet-cpp
程式庫中的 UBSAN 失敗 - 對於捆綁的 Linux 建置,尋找
cmake
的邏輯更加穩健,您現在可以透過設定CMAKE
環境變數來指定/path/to/cmake
arrow 1.0.0
CRAN 發行版本:2020-07-25
Arrow 格式轉換
-
vignette("arrow", package = "arrow")
包含表格,說明 R 類型如何轉換為 Arrow 類型,反之亦然。 - 新增了對轉換為/從更多 Arrow 類型的支援:
uint64
、binary
、fixed_size_binary
、large_binary
、large_utf8
、large_list
、list
ofstructs
。 -
超過 2GB 的
character
向量會轉換為 Arrowlarge_utf8
類型 -
POSIXlt
物件現在可以轉換為 Arrow (struct
) - R
attributes()
在轉換為 Arrow RecordBatch 和表格時會保留在 Arrow 中繼資料中,並在從 Arrow 轉換時還原。這表示自訂子類別 (例如haven::labelled
) 會在透過 Arrow 的往返中保留。 - Schema 中繼資料現在公開為具名列表,並且可以透過賦值來修改,例如
batch$metadata$new_key <- "new value"
- 如果所有值都符合範圍,Arrow 類型
int64
、uint32
和uint64
現在會轉換為 Rinteger
- Arrow
date32
現在使用double
底層儲存轉換為 RDate
。即使資料值本身是整數,這也能提供更嚴格的往返保真度 - 在轉換為 R
factor
時,沒有相同字典的dictionary
ChunkedArrays 會正確地統一 - 在 1.0 版本中,Arrow IPC 中繼資料版本從 V4 增加到 V5。預設情況下,
RecordBatch{File,Stream}Writer
將寫入 V5,但您可以指定替代的metadata_version
。為了方便起見,如果您知道您要寫入的使用者無法讀取 V5,您可以設定環境變數ARROW_PRE_1_0_METADATA_VERSION=1
以寫入 V4,而無需變更任何其他程式碼。
資料集
- 現在支援 CSV 和其他文字分隔資料集
- 使用自訂 C++ 建置,可以透過傳遞類似
ds <- open_dataset("s3://...")
的 URL,直接在 S3 上讀取資料集。請注意,這目前需要具有額外相依性的特殊 C++ 程式庫建置 - 這在 CRAN 發行版本或 Nightly 套件中尚不可用。 - 在讀取個別 CSV 和 JSON 檔案時,會從檔案副檔名自動偵測壓縮
其他增強功能
- C++ 聚合方法的初始支援:已針對
Array
和ChunkedArray
實作sum()
和mean()
- 表格和 RecordBatch 具有其他類似 data.frame 的方法,包括
dimnames()
和as.list()
- 表格和 ChunkedArrays 現在可以透過
reticulate
移至/從 Python 移出
錯誤修正和棄用
- 在傳遞至 Arrow 記憶體時,非 UTF-8 字串 (在 Windows 上常見) 會正確強制轉換為 UTF-8,並在轉換為 R 時適當地重新本地化
write_parquet()
的coerce_timestamps
選項現在已正確實作。- 如果使用者提供,建立 Dictionary array 會尊重
type
定義 -
read_arrow
和write_arrow
現在已棄用;請根據您處理的是 Arrow IPC 檔案或串流格式,分別使用read/write_feather()
和read/write_ipc_stream()
函數。 - 先前已棄用的
FileStats
、read_record_batch
和read_table
已移除。
arrow 0.17.1
CRAN 發行版本:2020-05-19
- 更新以與
dplyr
1.0 相容 -
reticulate::r_to_py()
轉換現在可以自動正確運作,而無需自行呼叫方法 - C++ 程式庫中圍繞 Parquet 讀取的各種錯誤修正
arrow 0.17.0
CRAN 發行版本:2020-04-21
Feather v2
此版本包含對 Feather 檔案格式第 2 版的支援。Feather v2 具有對所有 Arrow 資料類型的完整支援,修正了大量字串資料的每個欄位 2GB 限制,並且允許使用 lz4
或 zstd
壓縮檔案。write_feather()
可以寫入第 2 版或 第 1 版 Feather 檔案,而 read_feather()
會自動偵測它正在讀取的檔案版本。
與此變更相關的是,已重新設計多個圍繞讀取和寫入資料的函數。已新增 read_ipc_stream()
和 write_ipc_stream()
,以方便將資料寫入 Arrow IPC 串流格式,這與 IPC 檔案格式略有不同 (Feather v2 是 IPC 檔案格式)。
行為已標準化:所有 read_<format>()
都會傳回 R data.frame
(預設值) 或 Table
(如果引數 as_data_frame = FALSE
);所有 write_<format>()
函數都會以不可見的方式傳回資料物件。為了方便某些工作流程,新增了一個特殊的 write_to_raw()
函數來包裝 write_ipc_stream()
並傳回包含已寫入緩衝區的 raw
向量。
為了實現此標準化,已棄用 read_table()
、read_record_batch()
、read_arrow()
和 write_arrow()
。
Python 互通性
0.17 Apache Arrow 版本包含 C 資料介面,可讓您在 C 層級的處理程序中交換 Arrow 資料,而無需複製,且程式庫之間彼此沒有建置或執行階段相依性。這讓我們能夠使用 reticulate
在 R 和 Python (pyarrow
) 之間有效率地共用資料。
請參閱 vignette("python", package = "arrow")
以取得詳細資訊。
資料集
- 資料集讀取受益於 C++ 程式庫中的許多加速和修正
- 資料集具有
dim()
方法,該方法會將所有檔案中的列加總 (#6635, @boshek) - 使用
c()
方法將多個資料集合併到單一可查詢的UnionDataset
中 - 資料集篩選現在將
NA
視為FALSE
,與dplyr::filter()
一致 - 現在所有 Arrow 日期/時間/時間戳記欄位類型都正確支援資料集篩選
-
vignette("dataset", package = "arrow")
現在具有正確、可執行的程式碼
安裝
- Linux 上的安裝現在預設從原始碼建置 C++ 程式庫,並停用了一些壓縮程式庫。為了獲得更快、更豐富的建置,請設定環境變數
NOT_CRAN=true
。請參閱vignette("install", package = "arrow")
以取得詳細資訊和更多選項。 - 原始碼安裝在更多 Linux 發行版本上更快且更可靠。
其他錯誤修正和增強功能
-
unify_schemas()
建立包含多個 schema 中欄位聯集的Schema
- 時區在 R 和 Arrow 之間的往返中忠實地保留
-
read_feather()
和其他讀取器函數會關閉它們開啟的任何檔案連線 - 當也載入
R.oo
套件時,Arrow R6 物件不再發生命名空間衝突 -
FileStats
已重新命名為FileInfo
,且原始拼字已棄用
arrow 0.16.0.2
CRAN 發行版本:2020-02-14
-
install_arrow()
現在安裝arrow
的最新版本,包括 Linux 相依性,適用於 CRAN 發行版本或開發建置 (如果nightly = TRUE
) - 除非設定
LIBARROW_DOWNLOAD
或NOT_CRAN
環境變數,否則 Linux 上的套件安裝不再下載 C++ 相依性 -
write_feather()
、write_arrow()
和write_parquet()
現在傳回其輸入,類似於readr
套件中的write_*
函數 (#6387, @boshek) - 現在可以推斷 R
list
的類型,並在所有 list 元素都是相同類型時建立 ListArray (#6275, @michaelchirico)
arrow 0.16.0
CRAN 發行版本:2020-02-09
多檔案資料集
此版本包含 Arrow 資料集的 dplyr
介面,可讓您有效率地將大型多檔案資料集作為單一實體使用。使用 open_dataset()
探索資料檔案目錄,然後使用 dplyr
方法來 select()
、filter()
等。工作將在 Arrow 記憶體中盡可能完成。必要時,資料會提取到 R 中以進行進一步計算。如果您有可用的 dplyr
,則會有條件地載入 dplyr
方法;它不是硬性相依性。
請參閱 vignette("dataset", package = "arrow")
以取得詳細資訊。
Linux 安裝
從原始碼套件安裝 (如從 CRAN 安裝) 現在將自動處理其 C++ 相依性。對於常見的 Linux 發行版本和版本,安裝將檢索預先建置的靜態 C++ 程式庫以包含在套件中;如果此二進位檔不可用,則套件會執行一個捆綁的腳本,該腳本應該建置 Arrow C++ 程式庫,而除了 R 需要的系統相依性之外,沒有其他系統相依性。
請參閱 vignette("install", package = "arrow")
以取得詳細資訊。
資料探索
-
Table
和RecordBatch
也具有dplyr
方法。 - 為了在沒有
dplyr
的情況下進行探索,表格、RecordBatch、Arrays 和 ChunkedArrays 的[
方法現在支援自然列提取運算。這些方法使用 C++Filter
、Slice
和Take
方法進行有效率的存取,具體取決於選取向量的類型。 - 也新增了一個實驗性的延遲評估
array_expression
類別,除其他外,它能夠使用 Arrays 的某些函數來篩選表格,例如arrow_table[arrow_table$var1 > 5, ]
,而無需先將所有內容提取到 R 中。
壓縮
-
write_parquet()
現在支援壓縮 -
codec_is_available()
傳回TRUE
或FALSE
,表示 Arrow C++ 程式庫是否建置為支援給定的壓縮程式庫 (例如 gzip、lz4、snappy) - Windows 建置現在包含對 zstd 和 lz4 壓縮的支援 (#5814, @gnguy)
其他修正和改進
- 現在支援 Arrow null 類型
- Factor 類型現在在透過 Parquet 格式的往返中保留 (#6135, @yutannihilation)
- 讀取 Arrow 字典類型會強制將字典值轉換為
character
(因為 Rfactor
層級需要為字元),而不是引發錯誤 - 對 Parquet 函數文件進行了許多改進 (@karldw, @khughitt)
arrow 0.15.0
CRAN 發行版本:2019-10-07
重大變更
- 現在已記錄和匯出包裝 C++ 類別的 R6 類別,並且已重新命名為更符合 R 的風格。此套件中高階 R 介面的使用者不受影響。想要更直接地與 Arrow C++ API 互動的使用者應該使用這些物件和方法。作為此變更的一部分,許多實例化這些 R6 物件的函數已被移除,取而代之的是
Class$create()
方法。值得注意的是,arrow::array()
和arrow::table()
已移除,取而代之的是Array$create()
和Table$create()
,消除了有關遮罩base
函數的套件啟動訊息。如需更多資訊,請參閱新的vignette("arrow")
。 - 由於 Arrow 訊息格式的細微變更,0.15 版本程式庫寫入的資料可能無法由較舊版本讀取。如果您需要將資料傳送到使用較舊版本 Arrow 的處理程序 (例如,尚未更新到 Arrow 0.15 的 Apache Spark 伺服器),您可以設定環境變數
ARROW_PRE_0_15_IPC_FORMAT=1
。 read_*()
函數中的as_tibble
引數已重新命名為as_data_frame
(#5399, @jameslamb)arrow::Column
類別已移除,因為它已從 C++ 程式庫中移除
新功能
-
Table
和RecordBatch
物件具有 S3 方法,可讓您更像data.frame
一樣使用它們。提取欄位、子集等等。請參閱?Table
和?RecordBatch
以取得範例。 - C++ 檔案系統 API 的綁定初始實作。 (#5223)
- Windows 上現在支援壓縮串流 (#5329),您也可以指定壓縮層級 (#5450)
其他升級
- 由於 Arrow C++ 程式庫的改進,Parquet 檔案讀取速度更快。
-
read_csv_arrow()
支援更多剖析選項,包括col_names
、na
、quoted_na
和skip
-
read_parquet()
和read_feather()
可以從raw
向量攝取資料 (#5141) - 檔案讀取器現在可以正確處理需要展開的路徑,例如
~/file.parquet
(#5169) - 改進了在 schema 中建立類型的支援:類型的列印名稱 (例如 "double") 保證在實例化 schema (例如
double()
) 時有效使用,並且可以使用人類友善的解析度字串 ("ms"、"s" 等) 建立時間類型。 (#5198, #5201)