跳过内容

arrow 22.0.0

新功能

次要改进和修复

arrow 21.0.0.1

CRAN 发布:2025-08-18

次要改进和修复

  • 修补捆绑版本的 Thrift 以防止 CRAN 检查失败 (@kou, #47286)

arrow 21.0.0

CRAN 发布:2025-07-24

新功能

次要改进和修复

  • S3FileSystem 中公开选项 check_directory_existence_before_creation,以减少云存储上的 I/O 调用 (@HaochengLIU, #41998)。
  • case_when() 现在能正确检测不在全局环境中的对象 (@etiennebacher, #46667)。
  • 负分数日期现在通过向下取整值正确转换为整数 (#46873)。
  • 已从 R 包中删除对旧版 Arrow C++ 版本的向后兼容性检查 (#46491)。这不应影响大多数用户,只有当您使用不同的 R 包和 Arrow C++ 版本从源代码构建 R 包时才会受到影响。
  • 在捆绑构建脚本中,对于完整源代码构建,要求 CMake 3.25 或更高版本 (#46834)。这不应影响大多数用户。

arrow 20.0.0.2

CRAN 发布:2025-05-26

次要改进和修复

  • 更新内部 C++ 代码以符合 CRAN 的 gcc-UBSAN 检查 (#46394)

arrow 20.0.0

CRAN 发布:2025-05-10

次要改进和修复

  • 转换为 R 对象时,二进制数组除了继承 arrow_binary 外,现在还继承 blob::blob。此更改是最终废弃 arrow_binary 类,转而使用 blob 包中的 blob 类的第一步 (参见 GH-45709)。

arrow 19.0.1.1

CRAN 发布:2025-04-08

次要改进和修复

  • 更新内部代码以符合 CRAN 对非 API 调用的新要求 (#45949)
  • 启用在 CMake 4.0 下构建捆绑的第三方库 (#45987)

arrow 19.0.1

CRAN 发布:2025-02-26

此版本主要将包使用的底层 Arrow C++ 版本更新到 19.0.1,并包含 19.0.0 和 19.0.1 版本的所有更改。有关 Arrow C++ 19.0.0 的更改,请参阅博客文章更新日志。有关 Arrow C++ 19.0.1 的更改,请参阅博客文章更新日志

arrow 18.1.0

CRAN 发布:2024-12-05

次要改进和修复

  • 修复绑定以允许在数据集中使用 %in% 过滤因子列 (#43446)
  • 更新 str_sub 绑定以正确处理负 end 值 (@coussens, #44141)
  • 修复 readr 中的 altrep 字符串列 (#43351)
  • 修复 ParquetFileWriter$WriteTable 中的崩溃并添加 WriteBatch (#42241)
  • 修复 Math 组泛型中的绑定 (@aboyoun, #43162)
  • 修复分组查询上的 pull 返回错误列的问题 (#43172)

arrow 17.0.0

CRAN 发布:2024-08-17

新功能

  • 用户编写的使用 Arrow 支持的数据集查询中函数的 R 函数现在也可以用于查询。以前,只有使用算术运算符的函数才能工作。例如,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)

次要改进和修复

  • 默认情况下为 macOS 启用 S3 和 ZSTD 功能。 (#42210)
  • 修复 Math 组泛型中的绑定。 (#43162)
  • 修复分组数据集上 pull 实现中的一个错误,现在它返回预期的列。 (#43172)
  • Arrow R 包可以构建的 Arrow C++ 库的最低版本已提升到 15.0.0 (#42241)

arrow 16.1.0

CRAN 发布:2024-05-25

新功能

  • 现在可以将流写入套接字连接 (#38897)
  • Arrow R 包现在可以使用旧版本的 Arrow C++ 库 (回溯到 13.0.0) 进行构建 (#39738)

次要改进和修复

  • 数据集和表输出打印现在截断长度超过 20 项的模式 (#38916)
  • 修复了指向 Python 的指针转换,以确保数据可以在 Arrow 和 PyArrow 之间传递 (#39969)
  • 在 macOS 上检查我们是否正在使用 GNU libtool,并确保我们使用 macOS libtool (#40259)
  • 修复了在 Windows 上创建包含所有依赖项的捆绑 tarball 失败的错误 (@hutch3232, #40232)

arrow 15.0.1

CRAN 发布:2024-03-12

新功能

  • 已添加 base::prod 的绑定,因此您现在可以在 dplyr 管道中使用它 (即 tbl |> summarize(prod(col))) 而无需将数据拉入 R (@m-muecke, #38601)。
  • Dataset 对象调用 dimnamescolnames 现在返回有用的结果而不是 NULL (#38377)。
  • Schema 对象的 code() 方法现在接受一个可选的 namespace 参数,当为 TRUE 时,它会将名称前缀为 arrow::,这使得输出更具可移植性 (@orgadish, #38144)。

次要改进和修复

  • 当 ARROW_OFFLINE_BUILD=true 时不下载 cmake,并更新 SystemRequirements (#39602)。
  • 如果二进制下载失败,则优雅地回退到源代码构建 (#39587)。
  • sub, gsub, stringr::str_replace, stringr::str_replace_allpattern 参数传入长度 > 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.2.1

CRAN 发布:2024-02-23

次要改进和修复

  • 从源代码构建时检查互联网访问,如果失败则回退到最小范围的 Arrow C++ 构建 (#39699)。
  • macOS 上默认从源代码构建,使用 LIBARROW_BINARY=true 以获得旧行为 (#39861)。
  • 支持针对旧版 Arrow C++ 进行构建。目前此功能是选择性加入的 (ARROW_R_ALLOW_CPP_VERSION_MISMATCH=true),并且至少需要 Arrow C++ 13.0.0 (#39739)。
  • 使在 Windows 上的 Rtools 中使用 Arrow C++ 成为可能(在未来的 Rtools 版本中)。 (#39986)。

arrow 14.0.2

次要改进和修复

  • 修复了隐式转换导致的 C++ 编译器警告 (#39138, #39186)。
  • 修复了测试期间令人困惑的 dplyr 警告 (#39076)。
  • 添加了缺失的 “-framework Security” pkg-config 标志,以防止在严格链接器设置下编译时出现问题 (#38861)。

arrow 14.0.0.2

CRAN 发布:2023-12-02

次要改进和修复

  • 修复了 printf 语法以与格式检查对齐 (#38894)
  • 删除了配置脚本中的 bashism (#38716)。
  • 修复了 README 中损坏的链接 (#38657)
  • 在 lintr 配置中正确转义许可头文件 (#38639)。
  • 删除了安装脚本测试套件中的虚假警告 (#38571)。
  • 重构后完善了安装脚本 (#38534)

安装

  • 如果 pkg-config 未能检测到所需的库,则会运行额外的搜索而不使用 pkg-config (#38970)。
  • 安装开发版本时获取最新的 nightly Arrow C++ 二进制文件 (#38236)。

arrow 14.0.0.1

CRAN 发布:2023-11-24

次要改进和修复

  • 为构建失败添加更多调试输出 (#38819)
  • 增加静态库下载期间的超时时间 (#38767)
  • 修复 rosetta 检测导致安装失败的错误 (#38754)

arrow 14.0.0

CRAN 发布:2023-11-16

新功能

次要改进和修复

  • 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.1

CRAN 发布:2023-09-22

  • 删除对旧时区引用以防止 CRAN 检查失败 (#37671)

arrow 13.0.0

CRAN 发布:2023-08-30

突破性更改

  • 仅继承自 data.frame 而没有其他类的输入对象的 class 属性现在被删除,导致文件读取函数和 arrow_table() 始终返回 tibble,从而实现返回对象类型的一致性。对 Arrow Tabular 对象调用 as.data.frame() 现在始终返回 data.frame 对象 (#34775)

新功能

次要改进和修复

  • 可以使用便捷函数 arrow_array() 创建 Arrow 数组 (#36381)
  • 便捷函数 scalar() 可用于创建 Arrow 标量 (#36265)
  • 通过始终从主 R 线程调用 DuckDB 中的 RecordBatchReader::ReadNext(),防止在 arrow 和 duckdb 之间传递数据时崩溃 (#36307)
  • num_threads < 2 时,为 set_io_thread_count() 发出警告 (#36304)
  • 确保将缺失的分组变量添加到变量列表的开头 (#36305)
  • CSV 文件读取器选项类对象可以打印选定的值 (#35955)
  • 模式元数据可以设置为命名字符向量 (#35954)
  • 确保 RStringViewer 辅助类不拥有任何数组引用 (#35812)
  • 如果 %z 是格式字符串的一部分,则 arrow 中的 strptime() 将返回一个时区感知的 timestamp (#35671)
  • 当结合 group_by()across() 时,列的排序现在与 dplyr 匹配 (@eitsupi, #35473)

安装

  • 使用 autobrew 时链接到正确版本的 OpenSSL (#36551)
  • 在捆绑构建脚本中需要 cmake 3.16 (#36321)

文档

  • 拆分 R6 类和便捷函数以提高可读性 (#36394)
  • 启用 pkgdown 内置搜索 (@eitsupi, #36374)
  • 重新组织 pkgdown 网站上的参考页面以提高可读性 (#36171)

arrow 12.0.1.1

CRAN 发布:2023-07-18

  • 将包版本引用更新为仅文本而非数字,因为 CRAN 更新要求如此 (#36353, #36364)

arrow 12.0.1

CRAN 发布:2023-06-15

  • 更新 Arrow C++ 库随附的日期库版本,以与 tzdb 0.4.0 兼容 (#35594, #35612)。
  • 更新了一些测试以兼容 waldo 0.5.1 (#35131, #35308)。

arrow 12.0.0

CRAN 发布:2023-05-05

新功能

安装

  • 托管在 Ubuntu 18.04 和 20.04 上的静态 libarrow 二进制文件以前是在 Ubuntu 18.04 上构建的,该版本将于 5 月停止接收 LTS 更新。
    1. 这些二进制文件现在在 Centos 7 上构建 (#32292, #34048)。

次要改进和修复

  • 修复了在进程退出时发生的与 S3 文件系统组件终结相关的崩溃 (#15054, #33858)。
  • 实现 Arrow C++ FetchNodeOrderByNode 以提高性能并简化从 dplyr 表达式构建查询计划 (#34437, #34685)。
  • 修复了 arrow_table() 中由于微妙的参数传递语义而写入不同 R 元数据的错误 (#35038, #35039)。
  • 改进了尝试将带有 NULL 列名的 data.frame 转换为 Table 时的错误消息 (#15247, #34798)。
  • 更新了 vignettes 以反映 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() 中提供了 schemacol_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() 默认是惰性的;它现在返回一个 RecordBatchReader 而不是 RecordBatch 对象的列表,除非 lazy = FALSE。 (#14521)

新功能

文档

  • 许多 vignettes 和 README 进行了实质性的重组、重写和补充。 (@djnavarro, #14514)

读取/写入数据

dplyr 兼容性

函数绑定

Arrow 对象创建

  • Arrow Scalars 可以从 POSIXlt 对象创建。 (#15277)
  • Array$create() 可以创建 Decimal 数组。 (#15211)
  • StructArray$create() 可用于创建 StructArray 对象。 (#14922)
  • 从大于 2^31 的对象创建数组具有正确的长度 (#14929)

安装

  • 改进了使用预下载二进制文件进行离线安装。 (@pgramme, #14086)
  • 该软件包可以自动链接到 C++ 的 AWS SDK 的系统安装。 (@kou, #14235)

次要改进和修复

arrow 10.0.1

CRAN 发布:2022-12-06

次要改进和修复

  • 修复 lubridate 1.9 发布后失败的测试 (#14615)
  • 更新以确保与开发 purrr 中的更改兼容 (#14581)
  • 修复以正确处理 dplyr::group_by() 中的 .data 代词 (#14484)

arrow 10.0.0

CRAN 发布:2022-10-26

Arrow dplyr 查询

几个新函数可以在查询中使用

该包现在有文档列出了所有在 Arrow 数据上支持的 dplyr 方法和 R 函数映射,以及关于 R 中评估的查询与 Arrow 查询引擎 Acero 中评估的查询之间功能差异的说明。请参阅 ?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 查询

读取和写入

  • 添加了新函数 read_ipc_file()write_ipc_file()。这些函数与 read_feather()write_feather() 几乎相同,但不同之处在于它们仅针对 IPC 文件 (Feather V2 文件),而不针对 Feather V1 文件。
  • read_arrow()write_arrow()(自 1.0.0 版(2020 年 7 月)起已弃用)已被删除。请改用 read_ipc_file()write_ipc_file() 处理 IPC 文件,或使用 read_ipc_stream()write_ipc_stream() 处理 IPC 流。 (#13550)
  • write_parquet() 现在默认为写入 Parquet 格式版本 2.4 (之前是 1.0)。以前弃用的参数 propertiesarrow_properties 已被删除;如果您需要直接处理这些较低级别的属性对象,请使用 ParquetFileWriter,它是 write_parquet() 的包装。 (#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_creationallow_bucket_deletion。 (#13206)
  • GcsFileSystemgs_bucket() 允许连接到 Google Cloud Storage。 (#10999, #13601)

数组和表

  • Table 和 RecordBatch $num_rows() 方法返回双精度浮点数(之前是整数),避免了在大表中出现整数溢出。 (#13482, #13514)

打包

  • 用于 R 包和预构建 libarrow 二进制文件的 nightly builds 的 arrow.dev_repo 现在是 https://nightlies.apache.org/arrow/r/
  • Brotli 和 BZ2 随 macOS 二进制文件一起提供。BZ2 随 Windows 二进制文件一起提供。 (#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_filesmax_rows_per_filemin_rows_per_groupmax_rows_per_group
  • write_csv_arrow() 接受 Dataset 或 Arrow dplyr 查询。
  • option(use_threads = FALSE) 时连接一个或多个数据集不再导致 R 崩溃。该选项在 Windows 上默认设置。
  • dplyr 连接支持 suffix 参数来处理列名重叠。
  • 使用 is.na() 过滤 Parquet 数据集不再遗漏任何行。
  • map_batches() 正确接受 Dataset 对象。

日期和时间支持的增强功能

可扩展性

  • 为主要 Arrow 对象添加了 S3 泛型转换函数,如 as_arrow_array()as_arrow_table()。这包括 Arrow 表、记录批次、数组、分块数组、记录批次读取器、模式和数据类型。这允许其他包定义从其类型到 Arrow 对象的自定义转换,包括扩展数组。
  • 可以创建和注册自定义扩展类型和数组,允许其他包定义自己的数组类型。扩展数组封装了常规 Arrow 数组类型,并提供自定义行为和/或存储。请参阅 ?new_extension_type 中的描述和示例。
  • 为所有 vctrs::vec_is() 返回 TRUE 的对象(即,任何可在 tibble::tibble() 中用作列的对象)实现了通用扩展类型和 as_arrow_array() 方法,前提是底层 vctrs::vec_data() 可以转换为 Arrow 数组。

串联支持

Arrow 数组和表可以轻松串联

  • 数组可以使用 concat_arrays() 进行串联,如果需要零拷贝并且分块是可接受的,则可以使用 ChunkedArray$create()
  • ChunkedArrays 可以使用 c() 进行串联。
  • RecordBatches 和 Tables 支持 cbind()
  • Tables 支持 rbind()。还提供了 concat_tables() 以在统一模式的同时连接表。

其他改进和修复

  • 字典数组在转换为 R 因子时支持使用 ALTREP。
  • Math 组泛型已针对 ArrowDatum 实现。这意味着您可以将 sqrt()log()exp() 等基本函数与 Arrow 数组和标量一起使用。
  • read_*write_* 函数支持 R Connection 对象用于读取和写入文件。
  • 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() 的标签参数已实现。
  • 支持 summarize() 中更复杂的表达式,例如 ifelse(n() > 1, mean(y), mean(z))
  • 在 dplyr 管道中添加列时,现在可以使用 tibbledata.frame 分别创建 tibbles 或 data.frames 的列(例如 ... %>% mutate(df_col = tibble(a, b)) %>% ...)。
  • 字典列 (R factor 类型) 在 coalesce() 中受支持。
  • open_dataset() 接受读取 Hive 风格分区文件时的 partitioning 参数,即使它不是必需的。
  • 用于数据集自定义操作的实验性 map_batches() 函数已恢复。

CSV

  • 现在可以读取编码(使用读取时的 encoding 参数)不是 UTF 的带分隔符文件(包括 CSV)。
  • open_dataset() 正确忽略 CSV 中的字节顺序标记 (BOM),就像读取单个文件时一样。
  • 读取数据集内部默认使用异步扫描器,这解决了读取大型 CSV 数据集时潜在的死锁问题。
  • head() 不再在大型 CSV 数据集上挂起。
  • 当文件中的标题与作为参数提供的模式/列名冲突时,会显示改进的错误消息。
  • write_csv_arrow() 现在遵循 readr::write_csv() 的签名。

其他改进和修复

  • 许多 vignettes 已重新组织、重构和扩展,以提高其实用性和清晰度。
  • 用于生成模式(和单个数据类型规范)的代码可通过 schematype 上的 $code() 方法访问。这允许您轻松获取从已具有模式的对象创建模式所需的代码。
  • Arrow Duration 类型已映射到 R 的 difftime 类。
  • 支持 decimal256() 类型。decimal() 函数已修改为根据 precision 参数的值调用 decimal256()decimal128()
  • write_parquet() 使用合理的 chunk_size 猜测,而不是总是写入单个块。这提高了读取和写入大型 Parquet 文件的速度。
  • write_parquet() 不再丢弃分组 data.frames 的属性。
  • 分块数组现在支持使用 ALTREP。
  • 由Arrow数组支持的ALTREP向量不再因排序或取反而意外发生突变。
  • S3 文件系统可以使用 proxy_options 创建。
  • 已修复创建 S3 文件系统时发生的段错误。
  • Arrow 中的整数除法与 R 的行为更接近。

安装

  • 现在,源代码构建默认使用 pkg-config 搜索系统依赖项(例如 libz),如果存在则链接它们。此新默认设置将使在已安装这些依赖项的系统上从源代码构建 Arrow 更快。要保留以前下载和构建所有依赖项的行为,请设置 ARROW_DEPENDENCY_SOURCE=BUNDLED
  • 在 Linux 构建中,Snappy 和 lz4 压缩库默认启用。这意味着,默认构建的 Arrow,无需设置任何环境变量,将能够读取和写入 snappy 编码的 Parquet 文件。
  • Windows 二进制包包括 brotli 压缩支持。
  • 在 Windows 上构建 Arrow 可以找到本地构建的 libarrow 库。
  • 该软件包在树莓派操作系统上编译并安装。

底层更改

  • 用于在 R 和 Python 之间传递数据的指针已变得更加可靠。与旧版本 pyarrow 的向后兼容性已得到维护。
  • 用于在 dplyr 查询中注册新绑定​​的内部方法已更改。有关其工作原理的更多信息,请参阅关于编写绑定的新说明文档。
  • 不再支持 R 3.3。arrow 间接依赖的 glue 已放弃对其的支持。

Arrow 6.0.1

CRAN 发布日期:2021-11-20

  • 联接现在支持包含字典列,并修复了多处崩溃。
  • 在处理已过滤至 0 行的数据时,分组聚合不再崩溃
  • 在 dplyr 查询中为 str_count() 添加了绑定
  • 解决了 AWS SDK for C++ 中的一个关键错误,该错误可能影响 S3 分段上传。
  • round kernel 中的 UBSAN 警告已解决。
  • 修复了 Solaris 和旧版本 macOS 上的构建失败问题。

Arrow 6.0.0

现在有两种查询 Arrow 数据的方法

1. 扩展的 Arrow 原生查询:聚合和联接

dplyr::summarize(),包括分组和非分组,现在已为 Arrow 数据集、表和记录批次实现。由于数据是分块扫描的,因此您可以聚合由许多文件支持的超出内存大小的数据集。支持的聚合函数包括 n()n_distinct()min(), max()sum()mean()var()sd()any()all()median()quantile()(带一个概率)也受支持,目前使用 t-digest 算法返回近似结果。

除了 summarize() 之外,您还可以调用 count()tally()distinct(),它们有效地封装了 summarize()

此增强功能确实在某些情况下改变了 summarize()collect() 的行为:有关详细信息,请参阅下面的“破坏性更改”。

除了 summarize(),Arrow 也原生支持变异和过滤相等连接(inner_join()left_join()right_join()full_join()semi_join()anti_join())。

在此版本中,分组聚合和(尤其是)联接应被视为实验性的。我们期望它们能正常工作,但可能并非针对所有工作负载都进行了良好优化。为了帮助我们将精力集中在下一个版本的改进上,如果您遇到意外行为或性能不佳,请告诉我们。

新增的非聚合计算函数包括字符串函数,如 str_to_title()strftime(),以及用于从日期中提取日期部分(例如 year(), month())的计算函数。这不是附加计算函数的完整列表;有关所有可用计算函数的详尽列表,请参阅 list_compute_functions()

我们还努力为之前版本中添加的函数填补所有数据类型(例如 Decimal)的支持。之前版本说明中提到的所有类型限制应该不再有效,如果您发现某个函数未针对特定数据类型实现,请报告问题

2. DuckDB 集成

如果您安装了duckdb 包,您可以使用 to_duckdb() 函数将 Arrow 数据集或查询对象传递给 DuckDB 进行进一步查询。这允许您使用 duckdb 的 dbplyr 方法及其 SQL 接口来聚合数据。在 to_duckdb() 之前完成的过滤和列投影在 Arrow 中进行评估,并且 duckdb 也可以将某些谓词下推到 Arrow。这种传递不会复制数据,而是使用 Arrow 的 C 接口(就像在 R 和 Python 之间传递 Arrow 数据一样)。这意味着不会产生序列化或数据复制成本。

你也可以获取一个 duckdb tbl 并调用 to_arrow() 将数据流式传输到 Arrow 的查询引擎。这意味着在一个 dplyr 管道中,你可以从一个 Arrow 数据集开始,在 DuckDB 中评估一些步骤,然后将剩余部分在 Arrow 中评估。

破坏性更改

  • 从数据集查询返回的数据的行顺序不再是确定的。如果您需要稳定的排序顺序,应显式地 arrange() 查询结果。对于对 summarize() 的调用,您可以设置 options(arrow.summarise.sort = TRUE) 以匹配当前 dplyr 在分组列上排序的行为。
  • 在内存中的 Arrow 表或记录批次上使用 dplyr::summarize() 不再会立即评估。请调用 compute()collect() 来评估查询。
  • head()tail() 也不再立即评估,无论是对于内存中的数据还是对于数据集。此外,由于行顺序不再是确定性的,它们将有效地从数据集中的某个位置为您提供随机数据切片,除非您使用 arrange() 指定排序。
  • 将简单特征 (SF) 列转换为 Arrow 表(以及保存为 Parquet 或 Feather)时,不再保存所有元数据。这也包括任何在每个元素上都有属性的数据帧列(换句话说:行级元数据)。我们以前保存此元数据的方法既(计算上)效率低下,又在使用 Arrow 查询 + 数据集时不可靠。这将主要影响 SF 列的保存。对于保存这些列,我们建议将列转换为众所周知的二进制表示(使用 sf::st_as_binary(col)),或者使用 sfarrow 包,该包处理此转换过程的一些复杂性。我们计划在未来以安全有效的方式实现保存时,改进并重新启用此类自定义元数据。如果您需要保留 6.0.0 之前保存此元数据的行为,您可以设置 options(arrow.preserve_row_level_metadata = TRUE)。我们将在即将发布的版本中删除此选项。我们强烈建议尽可能避免使用此变通方法,因为未来的结果将不支持此功能,并可能导致令人惊讶和不准确的结果。如果您遇到除 sf 列之外的受此影响的自定义类,请报告问题
  • R < 4.0 (Rtools 3.5) 上的 32 位 Windows 不再正式支持数据集。32 位 Windows 用户应升级到更新版本的 R 才能使用数据集。

在 Linux 上安装

  • 如果 Arrow C++ 库无法编译,包安装现在会失败。在以前的版本中,如果 C++ 库编译失败,您将获得一个成功的 R 包安装,但它不会做太多有用的事情。
  • 在从源代码构建时,您可以通过设置环境变量 LIBARROW_MINIMAL=true 来禁用所有可选的 C++ 组件。这将包含核心 Arrow/Feather 组件,但排除 Parquet、数据集、压缩库和其他可选功能。
  • 现在,源包捆绑了 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() 不再报错。
  • 如果表达式在 Arrow 中不受支持,case_when() 现在会干净地报错。
  • open_dataset() 现在支持没有标题行的 CSV 文件。
  • 修复了一个小问题,即在 read_csv_arrow() 中,短的 readr 样式类型 Tt 被颠倒了。
  • log(..., base = b) 的绑定,其中 b 不是 2、e 或 10。
  • 我们的小插图有了一些更新和扩展。
  • 修复了将长度为 0 的 ChunkedArrays 转换为 R 向量时的段错误。
  • Table$create() 现在有一个别名 arrow_table()

内部

  • 我们现在使用 testthat 第 3 版作为默认版本。
  • 多次大型测试重组
  • 样式更改以符合 tidyverse 样式指南 + 使用 lintr。

Arrow 5.0.0.2

CRAN 发布日期:2021-09-05

此补丁版本包含对一些清理器和编译器警告的修复。

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() 等);三角函数(sin()cos() 等);abs()sign()pmin()pmax()ceiling()floor()trunc()
    • 条件函数,此版本对输入类型有一些限制:ifelse()if_else() 适用于除 Decimal 类型之外的所有类型;case_when() 仅适用于逻辑、数字和时间类型;coalesce() 适用于除列表/结构体之外的所有类型。另请注意,在此版本中,因子/字典在这些函数中被转换为字符串。
    • is.* 函数受支持,可在 relocate() 内部使用。
  • arrow_dplyr_query 的打印方法现在包含表达式和由 mutate() 导出的列的最终类型。

  • transmute() 现在如果传递了 .keep.before.after 参数,会报错,以与 dplyrdata.frames 上的行为保持一致。

CSV 写入

  • write_csv_arrow() 使用 Arrow 将数据框写入单个 CSV 文件
  • write_dataset(format = "csv", ...) 将数据集写入 CSV 文件,包括分区写入。

C 接口

  • 添加了 C 数据接口剩余部分的绑定:Type、Field 和 RecordBatchReader(来自实验性 C 流接口)。这些也具有 reticulate::py_to_r()r_to_py() 方法。随着 Scanner$ToRecordBatchReader() 方法的添加,您现在可以在 R 中构建数据集查询,并将生成的批处理流传递给进程中的另一个工具。
  • C 接口方法在 Arrow 对象(例如 Array$export_to_c()RecordBatch$import_from_c())上公开,类似于它们在 pyarrow 中的方式。这有助于它们在其他包中的使用。有关用法示例,请参阅 py_to_r()r_to_py() 方法。

其他增强功能

  • 将 R data.frame 转换为 Arrow Table 时,会跨列使用多线程。
  • 某些 Arrow 数组类型在转换为 R 时现在使用 ALTREP。要禁用此功能,请设置 options(arrow.use_altrep = FALSE)
  • is.na() 在浮点数字字段中的 NaN 值上现在评估为 TRUE,以与基础 R 保持一致。
  • is.nan() 在浮点数字字段中的 NA 值上现在评估为 FALSE,在非浮点字段中的所有值上评估为 FALSE,以与基础 R 保持一致。
  • ArrayChunkedArrayRecordBatchTable 的其他方法:na.omit() 及其相关函数,any()/all()
  • 传递给 RecordBatch$create()Table$create() 的标量输入将被回收。
  • arrow_info() 包含 C++ 构建的详细信息,例如编译器版本。
  • match_arrow() 现在将 x 转换为 Array,如果它不是 ScalarArrayChunkedArray,并且不再分派 base::match()
  • 行级元数据现在仅限于读/写单个 parquet 或 feather 文件。如果数据集包含行级元数据,则数据集的行级元数据将被忽略(并发出警告)。写入带行级元数据的数据集也将被忽略(并发出警告)。我们正在开发一个更稳健的实现来支持行级元数据(和其他复杂类型)——敬请期待。对于处理 {sf} 对象,{sfarrow} 有助于序列化 sf 列并与 geopandas 共享。

Arrow 4.0.1

CRAN 发布日期:2021-05-28

  • 解决了新字符串计算内核中的几个错误(#10320#10287

Arrow 4.0.0.1

CRAN 发布日期:2021-05-10

  • 在 Linux 上使用包的静态源构建时,mimalloc 内存分配器是默认的内存分配器。这是因为它在 valgrind 下比 jemalloc 表现更好。一个功能齐全的构建(使用 LIBARROW_MINIMAL=false 安装)同时包含 jemalloc 和 mimalloc,并且仍然以 jemalloc 为默认值,尽管这可以通过 ARROW_DEFAULT_MEMORY_POOL 环境变量在运行时进行配置。
  • 在 Linux 构建脚本中,环境变量 LIBARROW_MINIMALLIBARROW_DOWNLOADNOT_CRAN 现在不区分大小写。
  • macOS 二进制包中的构建配置问题已解决。

Arrow 4.0.0

CRAN 发布日期:2021-04-27

dplyr 方法

Arrow 对象支持更多 dplyr 动词

  • dplyr::mutate() 现在在许多应用中都支持 Arrow。对于 Arrow 中尚未支持的 TableRecordBatch 查询,实现会回退到先将数据拉入内存中的 R data.frame,如上一个版本所示。对于 Dataset 查询(可能大于内存),如果该函数未实现,则会引发错误。目前无法在 Arrow 对象上调用的主要 mutate() 功能是 (1) group_by() 之后的 mutate()(通常与聚合结合使用)和 (2) 使用 dplyr::across() 的查询。
  • dplyr::transmute() (调用 mutate())
  • dplyr::group_by() 现在保留 .drop 参数并支持即时定义列。
  • dplyr::relocate() 重新排列列
  • dplyr::arrange() 排序行
  • dplyr::compute() 用于评估惰性表达式并返回一个 Arrow 表。这等同于 dplyr::collect(as_data_frame = FALSE),后者是在 2.0.0 中添加的。

现在可以在 dplyr 动词中对 Arrow 对象调用 100 多个函数。

  • 字符串函数 nchar()tolower()toupper(),以及它们对应的 stringr 拼写 str_length()str_to_lower()str_to_upper(),在 Arrow dplyr 调用中都受支持。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 版本还允许 leftright 参数是数据中的列,而不仅仅是标量。
  • 此外,任何 Arrow C++ 计算函数都可以在 dplyr 动词中调用。这使您能够访问没有直接 R 映射的 Arrow 函数。有关所有可用函数的完整列表,请参阅 list_compute_functions(),这些函数在 dplyr 中以 arrow_ 为前缀。
  • Arrow C++ 计算函数现在在对不同类型(例如 int32 和 float64)的数据进行调用时,会进行更系统的类型提升。以前,表达式中的标量总是被强制转换为与相应数组的类型匹配,因此这种新的类型提升,除其他外,允许对数据集中的两列(数组)进行操作。作为一个副作用,一些在以前版本中有效的比较不再受支持:例如,dplyr::filter(arrow_dataset, string_column == 3) 将会因为数字 3string_column 的字符串类型之间的类型不匹配而报错。

数据集

  • open_dataset() 现在接受文件路径向量(甚至单个文件路径)。除其他外,这使您能够打开一个非常大的文件并使用 write_dataset() 对其进行分区,而无需将整个文件读入内存。
  • 数据集现在可以检测并读取压缩的 CSV 目录。
  • write_dataset() 现在默认使用 format = "parquet" 并更好地验证 format 参数。
  • open_dataset()schema 的无效输入现在已正确处理。
  • 从数据集中收集 0 列不再返回所有列。
  • Scanner$Scan() 方法已移除;请使用 Scanner$ScanBatches()

其他改进

  • value_counts() 用于汇总 ArrayChunkedArray 中的值,类似于 base::table()
  • StructArray 对象获得了类似数据帧的方法,包括 names()、$、[[ 和 dim()
  • RecordBatch 列现在可以通过使用 $[[ 赋值 (<-) 来添加、替换或删除。
  • 同样,Schema 现在可以通过分配新类型来编辑。这使得可以使用 CSV 读取器检测文件的模式,修改 Schema 对象以适应任何想要读取为不同类型的列,然后使用该 Schema 读取数据。
  • 创建带有模式、不同长度列和标量值回收的 Table 时,验证更完善。
  • 在 Windows 上读取日文或其他多字节区域设置的 Parquet 文件不再卡住(解决了 libstdc++ 中的一个错误;感谢 @yutannihilation 在发现此问题上的坚持不懈!)。
  • 如果您尝试读取包含嵌入式空字符 (\0) 的字符串数据,错误消息现在会通知您,您可以设置 options(arrow.skip_nul = TRUE) 来将其清除。不建议默认设置此选项,因为此代码路径明显较慢,并且大多数字符串数据不包含空字符。
  • read_json_arrow() 现在接受一个模式:read_json_arrow("file.json", schema = schema(col_a = float64(), col_b = string()))

安装和配置

  • R 包现在可以支持与禁用附加功能(例如数据集、parquet、字符串库)的 Arrow C++ 库一起使用,并且捆绑的构建脚本允许设置环境变量来禁用它们。有关详细信息,请参阅 vignette("install", package = "arrow")。这允许在有用时更快、更小的包构建,并且它允许在 Solaris 上构建最小的、功能正常的 R 包。
  • 在 macOS 上,现在可以通过设置环境变量 FORCE_BUNDLED_BUILD=true 来使用与 Linux 默认捆绑的 C++ 构建,以及其所有自定义参数。
  • arrow 现在在 macOS 上默认使用 mimalloc 内存分配器(如果可用,例如在 CRAN 二进制文件中),而不是 jemallocjemalloc 在 macOS 上存在配置问题,且基准分析表明这会对性能产生负面影响,尤其是在内存密集型工作流程中。jemalloc 在 Linux 上仍是默认值;mimalloc 在 Windows 上是默认值。
  • 当 Arrow C++ 库被静态链接(通常在从 CRAN 安装时)时,设置 ARROW_DEFAULT_MEMORY_POOL 环境变量来切换内存分配器现在可以正常工作。
  • arrow_info() 函数现在报告附加的可选功能,以及检测到的 SIMD 级别。如果构建中未启用关键功能或压缩库,arrow_info() 将会引用安装说明文档,指导如何安装更完整的构建(如果需要)。
  • 如果您尝试读取用 Arrow 构建不支持的编解码器压缩的文件,错误消息现在会告诉您如何重新安装 Arrow 并启用该功能。
  • 关于开发人员环境设置的新说明文档 vignette("developing", package = "arrow")
  • 从源代码构建时,您可以使用环境变量 ARROW_HOME 指向 Arrow 库所在的特定目录。这类似于传递 INCLUDE_DIRLIB_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_pypy_to_r 方法。
  • 将表转换为 Python 时,Schema 元数据会正确保留。

增强功能

  • 算术运算(+* 等)在数组和分块数组上受支持,并可用于 Arrow dplyr 管道中的过滤表达式。
  • 现在可以通过使用 $[[ 赋值 (<-) 来添加、替换或删除表列。
  • 表的列名和记录批次可以通过赋值 names() 来重命名。
  • 现在可以将大字符串类型写入 Parquet 文件。
  • rlang 代词 .data.env 现在在 Arrow dplyr 管道中得到完全支持。
  • 选项 arrow.skip_nul(默认 FALSE,如 base::scan() 中所示)允许将包含嵌入式空字符 \0 的 Arrow 字符串 (utf8()) 类型数据转换为 R。如果设置为 TRUE,则会删除空字符,并在找到任何空字符时发出警告。
  • arrow_info() 提供各种运行时和构建时 Arrow 配置的概述,有助于调试。
  • 在加载 Arrow 包之前设置环境变量 ARROW_DEFAULT_MEMORY_POOL 可以更改内存分配器。Windows 包使用 mimalloc 构建;大多数其他包使用 jemalloc(默认使用)和 mimalloc 构建。这些替代的内存分配器通常比系统内存分配器快得多,因此在可用时默认使用它们,但有时为了调试目的关闭它们很有用。要禁用它们,请设置 ARROW_DEFAULT_MEMORY_POOL=system
  • 现在,在创建 Arrow 表时,包含每个元素属性的列表列也会包含在保存的元数据中。这使得 sf tibbles 能够忠实地保留和往返传输(#8549)。
  • 超过 100Kb 的 R 元数据现在在写入表之前进行压缩;有关更多详细信息,请参阅 schema()

错误修复

  • 修复了 2.0.0 版本中将 Arrow 字符串类型转换为 R 时存在的性能回归问题。
  • C++ 函数现在在需要时触发垃圾回收。
  • write_parquet() 现在可以写入 RecordBatches。
  • 从包含 0 批次的 RecordBatchStreamReader 读取表不再崩溃。
  • readrproblems 属性转换为 Arrow RecordBatch 和表时会将其移除,以防止意外累积大量元数据(#9092)。
  • 修复了使用 Arrow 0.17 写入的压缩 Feather 文件的读取问题(#9128)。
  • SubTreeFileSystem 获得了有用的打印方法,并且在打印时不再报错。

封装和安装

  • conda r-arrow 包的每晚开发版本可通过 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 时,允许您评估累积的 selectfilter 查询,但将结果保留在 Arrow 中,而不是 R data.frame 中。
  • read_csv_arrow() 支持指定列类型,包括使用 Schemareadr 包中使用的紧凑字符串表示形式。它还新增了一个 timestamp_parsers 参数,允许您表达一组 strptime 解析字符串,这些字符串将被尝试用于转换指定为 Timestamp 类型的列。

AWS S3 支持

  • S3 支持现在在二进制 macOS 和 Windows(仅 Rtools40,即 R >= 4.0)软件包中启用。要在 Linux 上启用它,您需要额外的系统依赖项 libcurlopenssl,以及足够现代的编译器。有关详细信息,请参阅 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")

计算

  • Arrow 数组和分块数组上的比较(==> 等)和布尔(&|!)操作,以及 is.na%in%match(称为 match_arrow()),现在已在 C++ 库中实现。
  • min()max()unique() 聚合方法已针对数组和分块数组实现。
  • Arrow 表和记录批次上的 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 中添加的往返保留数据帧列元数据外,现在数据帧本身的属性也保留在 Arrow 模式元数据中。
  • 文件写入器现在遵守系统 umask 设置。
  • ParquetFileReader 具有用于访问文件中单个列或行组的其他方法。
  • 修复了各种段错误:ParquetFileWriter 中无效输入;从保存的 R 对象中获取无效 ArrowObject 指针;将深度嵌套结构从 Arrow 转换为 R。
  • write_parquet()propertiesarrow_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 类型之间转换的支持:uint64binaryfixed_size_binarylarge_binarylarge_utf8large_listlist of structs
  • 超过 2GB 的 character 向量转换为 Arrow large_utf8 类型。
  • POSIXlt 对象现在可以转换为 Arrow (struct)。
  • 在转换为 Arrow RecordBatch 和表时,R attributes() 会保留在 Arrow 元数据中,并在从 Arrow 转换时恢复。这意味着自定义子类,例如 haven::labelled,在通过 Arrow 往返时会保留。
  • Schema 元数据现在以命名列表的形式公开,并且可以通过赋值进行修改,例如 batch$metadata$new_key <- "new value"
  • Arrow 类型 int64uint32uint64 现在在所有值都符合范围时转换为 R integer
  • Arrow date32 现在转换为 R Date,底层存储为 double。尽管数据值本身是整数,但这提供了更严格的往返保真度。
  • 转换为 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++ 构建,可以直接在 S3 上读取数据集,方法是传递一个 URL,如 ds <- open_dataset("s3://...")。请注意,这目前需要一个带有额外依赖项的特殊 C++ 库构建——这在 CRAN 版本或每晚构建包中尚不可用。
  • 读取单个 CSV 和 JSON 文件时,会自动从文件扩展名检测压缩。

其他增强功能

  • 初步支持 C++ 聚合方法:sum()mean() 已为 ArrayChunkedArray 实现。
  • 表和记录批次具有其他类似数据帧的方法,包括 dimnames()as.list()
  • Tables 和 ChunkedArrays 现在可以通过 reticulate 在 Python 之间移动。

错误修复和弃用

  • 非 UTF-8 字符串(在 Windows 上常见)在传递到 Arrow 内存时会正确强制转换为 UTF-8,并在转换为 R 时适当地重新本地化。
  • write_parquet()coerce_timestamps 选项现在已正确实现。
  • 创建 Dictionary 数组时,如果用户提供了 type 定义,则会遵守该定义。
  • read_arrowwrite_arrow 现已弃用;根据您处理 Arrow IPC 文件或流格式,分别使用 read/write_feather()read/write_ipc_stream() 函数。
  • 以前弃用的 FileStatsread_record_batchread_table 已移除。

安装和封装

  • 为了提高内存分配性能,macOS 和 Linux 二进制文件现在包含 jemalloc,而 Windows 包使用 mimalloc
  • Linux 安装:对二进制文件的操作系统检测进行了一些调整,对小插图中已知的安装问题进行了一些更新。
  • 捆绑的 libarrow 使用与 R 相同的 CCCXX 值构建。
  • 构建捆绑的 libarrow 失败会产生清晰的消息。
  • 各种精简工作,以减小库大小和编译时间。

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 的限制,并允许使用 lz4zstd 压缩文件。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
  • 时区在 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_DOWNLOADNOT_CRAN 环境变量,否则在 Linux 上安装包不再下载 C++ 依赖项。
  • write_feather()write_arrow()write_parquet() 现在返回它们的输入,类似于 readr 包中的 write_* 函数(#6387@boshek)。
  • 现在可以推断 R 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")

数据探索

  • Tables 和 RecordBatches 也具有 dplyr 方法。
  • 对于不使用 dplyr 的探索,Tables、RecordBatches、Arrays 和 ChunkedArrays 的 [ 方法现在支持自然的行提取操作。这些操作使用 C++ 的 FilterSliceTake 方法进行高效访问,具体取决于选择向量的类型。
  • 还添加了一个实验性的、延迟评估的 array_expression 类,它允许,除其他外,使用数组的一些函数(例如 arrow_table$var1 > 5)过滤表,而无需首先将所有内容拉入 R。

压缩

  • write_parquet() 现在支持压缩。
  • codec_is_available() 返回 TRUEFALSE,表示 Arrow C++ 库是否支持给定压缩库(例如 gzip、lz4、snappy)。
  • Windows 版本现在支持 zstd 和 lz4 压缩(#5814@gnguy)。

其他修复和改进

  • Arrow 空类型现在受支持。
  • 因子类型现在在通过 Parquet 格式进行往返时保留(#6135@yutannihilation)。
  • 读取 Arrow 字典类型时,会将字典值强制转换为 character(因为 R factor 级别要求如此),而不是引发错误。
  • Parquet 函数文档的许多改进(@karldw@khughitt)。

Arrow 0.15.1

CRAN 发布日期:2019-11-04

  • 此补丁版本包含 C++ 库中关于字典类型和 Parquet 读取的错误修复。

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++ 库中移除。

新功能

  • TableRecordBatch 对象具有 S3 方法,使您能够更像 data.frame 那样操作它们。提取列、子集等。有关示例,请参阅 ?Table?RecordBatch
  • C++ 文件系统 API 绑定的初始实现。(#5223
  • Windows 上现在支持压缩流(#5329),并且您还可以指定压缩级别(#5450)。

其他升级

  • 得益于 Arrow C++ 库的改进,Parquet 文件读取速度大大提高。
  • read_csv_arrow() 支持更多解析选项,包括 col_namesnaquoted_naskip
  • read_parquet()read_feather() 可以从 raw 向量中摄取数据(#5141)。
  • 文件读取器现在可以正确处理需要扩展的路径,例如 ~/file.parquet#5169)。
  • 改进了模式中类型创建的支持:类型的打印名称(例如“double”)保证在实例化模式(例如 double())时有效,并且时间类型可以使用人类友好的分辨率字符串(“ms”、“s”等)创建。(#5198#5201)。

Arrow 0.14.1

CRAN 发布日期:2019-08-05

arrow 包的首次 CRAN 发布。主要功能包括:

  • 读写支持各种文件格式,包括 Parquet、Feather/Arrow、CSV 和 JSON。
  • Arrow 数据类型和对象的 C++ 库 API 绑定,以及 Arrow 类型和 R 数据类型之间的映射。
  • C++ 库配置和安装的辅助工具。