更新日志
来源:NEWS.md
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 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)
arrow 16.1.0
CRAN 发布:2024-05-25
小的改进和修复
- 数据集和表输出打印现在会截断长度超过 20 个项目的模式 (#38916)
- 修复了最新的 reticulate 的指针转换到 Python,以确保可以在 Arrow 和 PyArrow 之间传递数据 (#39969)
- 检查 macOS 上是否正在使用 GNU libtool,并确保我们改用 macOS libtool (#40259)
- 修复了在 Windows 上创建包含所有依赖项的捆绑 tarball 失败的错误 (@hutch3232, #40232)
arrow 15.0.1
CRAN 发布:2024-03-12
小的改进和修复
- 当 ARROW_OFFLINE_BUILD=true 时,不要下载 cmake 并更新
SystemRequirements
(#39602)。 - 如果二进制下载失败,则优雅地回退到源构建 (#39587)。
- 现在,当在
pattern
中传递长度 > 1 的值的向量时,将抛出一个错误,而不是发出警告并将数据提取到 R 中 (对于sub
、gsub
、stringr::str_replace
、stringr::str_replace_all
) (@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()
提供 schema 时,分区变量现在包含在结果数据集中 (#37658)。 - 新函数
write_csv_dataset()
现在包装了write_dataset()
,并镜像了write_csv_arrow()
的语法 (@dgreiss, #36436)。 -
open_delim_dataset()
现在接受quoted_na
参数,将空字符串解析为 NA 值 (#37828)。 -
现在可以在
data.frame
对象上调用schema()
,以检索它们推断出的 Arrow schema (#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()
返回 tibbles,从而使返回对象的类型保持一致。在 Arrow 表格对象上调用as.data.frame()
现在始终返回data.frame
对象 (#34775)
新特性
-
open_dataset()
现在可以处理 ND-JSON 文件 (#35055) - 现在在多个 Arrow 对象上调用
schema()
将返回该对象的 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)
- Schema 元数据可以设置为命名字符向量 (#35954)
- 确保 RStringViewer 辅助类不拥有任何数组引用 (#35812)
-
如果
%z
是格式字符串的一部分,则 arrow 中的strptime()
将返回一个时区感知的 timestamp (#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)。 - 改进了使用带有
endpoint_override
的s3_bucket()
文件系统助手的使用体验,并修复了传递某些参数组合时发生的令人惊讶的行为 (@cboettig, #33904, #34009)。 - 如果在
open_csv_dataset()
中提供了schema
并且col_names = TRUE
,则不引发错误 (#34217, #34092)。
arrow 11.0.0.3
CRAN 发布: 2023-03-08
小的改进和修复
-
open_csv_dataset()
允许指定 schema。 (#34217) - 为了确保与即将发布的 dplyr 版本兼容,我们不再调用
dplyr:::check_names()
(#34369)
arrow 11.0.0.2
CRAN 发布: 2023-02-12
重大更改
-
map_batches()
默认是惰性的;现在它返回一个RecordBatchReader
而不是RecordBatch
对象的列表,除非lazy = FALSE
。 (#14521)
新特性
文档
- 对许多小插图和 README 进行了大量的重组、重写和补充。 (@djnavarro, #14514)
读取/写入数据
- 新函数
open_csv_dataset()
,open_tsv_dataset()
, 和open_delim_dataset()
都包装了open_dataset()
- 它们不提供新功能,但允许提供 readr 样式的选项,从而更易于在单个文件读取和数据集功能之间切换。 (#33614) - 在将 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.1
CRAN 发布: 2022-12-06
小的改进和修复
- 修复了 lubridate 1.9 发布后测试失败的问题 (#14615)
- 更新以确保与 dev purrr 中的更改兼容 (#14581)
- 修复了在
dplyr::group_by()
中正确处理.data
代词的问题 (#14484)
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()
。
该软件包现在有文档列出了所有 dplyr
方法和 R 函数映射,这些方法和映射在 Arrow 数据上受支持,以及关于在 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
,然后依次应用。没有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()
已被删除。 相反,对于 IPC 文件,请使用read_ipc_file()
和write_ipc_file()
,对于 IPC 流,请使用read_ipc_stream()
和write_ipc_stream()
。(#13550) -
write_parquet()
现在默认为写入 Parquet 格式版本 2.4(之前为 1.0)。先前已弃用的参数properties
和arrow_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_creation
或allow_bucket_deletion
。(#13206) -
GcsFileSystem
和gs_bucket()
允许连接到 Google Cloud Storage。(#10999, #13601)
打包
- R 包和预构建的 libarrow 二进制文件的 nightly build 的
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_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()
(duration 构造函数) -
?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 的所有对象实现了通用扩展类型和 as_arrow_array() 方法(即,任何可用作tibble::tibble()
中一列的对象),前提是底层的vctrs::vec_data()
可以转换为 Arrow 数组。
连接支持
可以轻松连接 Arrow 数组和表
- 可以使用
concat_arrays()
连接数组,或者,如果需要零拷贝并且可以接受分块,则可以使用ChunkedArray$create()
。 - 可以使用
c()
连接 ChunkedArrays。 - RecordBatches 和 Tables 支持
cbind()
。 - Tables 支持
rbind()
。 还提供了concat_tables()
以在统一模式的同时连接表。
其他改进和修复
- 字典数组在转换为 R 因子时支持使用 ALTREP。
- Math group generics 为 ArrowDatum 实现。 这意味着你可以将基本函数(如
sqrt()
、log()
和exp()
)与 Arrow 数组和标量一起使用。 -
read_*
和write_*
函数支持 R Connection 对象以读取和写入文件。 - Parquet 改进
- Parquet 写入器支持 Duration 类型列。
- 数据集 Parquet 读取器消耗更少的内存。
-
无论交互性如何,
median()
和quantile()
将仅警告一次关于近似计算。 -
Array$cast()
可以将 StructArrays 转换为具有相同字段名称和结构(或字段子集)但不同字段类型的另一种结构类型。 - 删除了对 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
分别创建 tibbles 或 data.frames 的列(例如,... %>% mutate(df_col = tibble(a, b)) %>% ...
)。 - 在
coalesce()
内部支持字典列(Rfactor
类型)。 -
读取 Hive 样式的分区文件时,即使不是必需的,
open_dataset()
也会接受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
- Joins 现在支持包含字典列,并且已修复多个崩溃问题
- 在处理已过滤为 0 行的数据时,分组聚合不再崩溃
- 为 dplyr 查询中的
str_count()
添加绑定 - 解决 AWS SDK for C++ 中的一个可能影响 S3 分段上传的关键 Bug
- 已解决 round kernel 中的一个 UBSAN 警告
- 修复了 Solaris 和旧版本 macOS 上的构建失败问题
Arrow 6.0.0
现在有两种方法可以查询 Arrow 数据
1. 扩展的 Arrow 原生查询:聚合和连接
现在为 Arrow Datasets、Tables 和 RecordBatches 实现了分组和未分组的 dplyr::summarize()
。 由于数据是分块扫描的,因此您可以对由多个文件支持的、大于内存的数据集进行聚合。 支持的聚合函数包括 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 包,则可以将 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()
以指定排序,否则它们实际上会为您提供数据集中某个位置的随机数据切片。 - 简单特征 (SF) 列在转换为 Arrow 表(因此在保存到 Parquet 或 Feather 时)不再保存其所有元数据。 这还包括在每个元素上都具有属性的任何 dataframe 列(换句话说:行级元数据)。 我们以前保存此元数据的方法在 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、Datasets、压缩库和其他可选功能。 - 源程序包现在捆绑了 Arrow C++ 源代码,因此不必下载它即可构建程序包。 因为包含了源代码,所以现在可以在离线/气隙系统上构建程序包。 默认情况下,离线构建将是最小的,因为它无法下载支持所有功能所需的第三方 C++ 依赖项。 为了允许功能齐全的离线构建,随附的
create_package_with_all_dependencies()
函数(也可以在 GitHub 上使用,而无需安装 arrow 包)将下载所有第三方 C++ 依赖项,并将它们捆绑在 R 源代码程序包中。 在连接到网络的系统上运行此函数以生成“fat”源程序包,然后将该 .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 的行为匹配,并且不再引发错误
-
与分组的 data.frame 一起使用时,
write_parquet()
不再出错 -
如果 Arrow 中不支持表达式,则
case_when()
现在会干净地报错 -
open_dataset()
现在可以在没有标题行的 CSV 上工作 - 修复了一个小问题,其中简短的 readr 样式类型
T
和t
在read_csv_arrow()
中被颠倒了 log(..., base = b)
的绑定,其中 b 不是 2、e 或 10- 对我们的小插曲进行了一些更新和扩展
- 修复了将长度为 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()
等);三角函数 (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", ...)
将数据集写入 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
转换为 ArrowTable
会跨列使用多线程 - 某些 Arrow 数组类型现在在转换为 R 时使用 ALTREP。 要禁用此功能,请设置
options(arrow.use_altrep = FALSE)
-
为了与基本 R 保持一致,
is.na()
现在在浮点数字段中的NaN
值上评估为TRUE
。 -
为了与基本 R 保持一致,
is.nan()
现在在浮点数字段中的NA
值上评估为FALSE
,并且在非浮点字段中的所有值上评估为FALSE
。 Array
、ChunkedArray
、RecordBatch
和Table
的其他方法:na.omit()
和朋友,any()
/all()
RecordBatch$create()
和Table$create()
的标量输入被回收-
arrow_info()
包括有关 C++ 构建的详细信息,例如编译器版本 -
match_arrow()
现在将x
转换为Array
(如果它不是Scalar
、Array
或ChunkedArray
),并且不再调度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)group_by()
之后的mutate()
(通常与聚合结合使用)以及 (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_
为前缀提供。 - 当对具有不同类型的数据(例如,int32 和 float64)调用 Arrow C++ 计算函数时,现在会进行更系统的类型提升。 以前,表达式中的标量始终强制转换为与相应数组的类型匹配,因此这种新的类型提升使能够对数据集中的两列(数组)进行操作。 作为副作用,不再支持某些在先前版本中有效的比较:例如,
dplyr::filter(arrow_dataset, string_column == 3)
会因数字3
和string_column
的字符串类型之间的类型不匹配而报错。
数据集
-
open_dataset()
现在接受文件路径向量(甚至单个文件路径)。 除此之外,这使您能够打开一个非常大的文件,并使用write_dataset()
对其进行分区,而无需将整个文件读入内存。 - 数据集现在可以检测和读取压缩 CSV 的目录
-
write_dataset()
现在默认为format = "parquet"
,并且更好地验证format
参数 - 现在可以正确处理
open_dataset()
中schema
的无效输入 - 从数据集收集 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++ 中的一个 bug;感谢 @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 包现在可以支持使用禁用了额外功能(例如数据集、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
方法 - 将 Tables 转换为 Python 或从 Python 转换时,Schema 元数据会被正确保留
增强功能
- Arrays 和 ChunkedArrays 支持算术运算(
+
,*
等),并且可以在 Arrowdplyr
管道中的过滤表达式中使用 - 现在可以通过使用
$
或[[
进行赋值(<-
)来添加、替换或删除 Table 的列 - 可以通过赋值
names()
来重命名 Tables 和 RecordBatches 的列名 - 现在可以将大型字符串类型写入 Parquet 文件
rlang
代词.data
和.env
现在在 Arrowdplyr
管道中得到完全支持。- 选项
arrow.skip_nul
(默认FALSE
, 类似于base::scan()
) 允许将包含嵌入的 nul\0
字符的 Arrow 字符串 (utf8()
) 类型数据转换为 R。如果设置为TRUE
,则将删除 nuls,如果找到任何 nuls,则会发出警告。 -
arrow_info()
用于概述各种运行时和构建时 Arrow 配置,可用于调试 - 在加载 Arrow 包之前设置环境变量
ARROW_DEFAULT_MEMORY_POOL
以更改内存分配器。 Windows 包使用mimalloc
构建;大多数其他包使用jemalloc
(默认使用)和mimalloc
构建。 这些替代内存分配器通常比系统内存分配器快得多,因此默认情况下在可用时使用它们,但有时关闭它们以进行调试会很有用。 要禁用它们,请设置ARROW_DEFAULT_MEMORY_POOL=system
。 - 现在,当创建 Arrow 表时,列表列(其每个元素上都有属性)也包含在保存的元数据中。 这允许
sf
tibbles 被忠实地保存并进行往返转换 (#8549)。 - 现在,超过 100Kb 的 R 元数据在写入表之前会被压缩; 有关更多详细信息,请参见
schema()
。
Bug 修复
- 修复了在 2.0.0 版本中将 Arrow 字符串类型转换为 R 的性能回归
- C++ 函数现在会在需要时触发垃圾回收
-
write_parquet()
现在可以写入 RecordBatches - 从包含 0 个批次的 RecordBatchStreamReader 读取 Table 不再崩溃
-
转换为 Arrow RecordBatch 和 table 时,将删除
readr
的problems
属性,以防止大量元数据意外累积 (#9092) - 修复了读取使用 Arrow 0.17 编写的压缩 Feather 文件的问题 (#9128)
-
SubTreeFileSystem
获得了一个有用的 print 方法,并且在打印时不再出错
打包和安装
- 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
允许您评估累积的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 Tables 和 RecordBatches 上的
dplyr
过滤表达式现在在 C++ 库中进行评估,而不是通过将数据拉入 R 并进行评估。 这带来了显着的性能提升。 -
现在支持 Table/RecordBatch 上 dplyr 查询的
dim()
(nrow
)
打包和安装
-
arrow
现在依赖于cpp11
,这带来了更强大的 UTF-8 处理和更快的编译速度 - Linux 构建脚本现在可以在旧版本的 R 上成功运行
- macOS 二进制包现在附带启用的 zstandard 压缩
Bug修复和其他增强功能
- 当所有值都适合 R 32 位整数时,Arrow
Int64
类型的自动转换现在可以正确地检查 ChunkedArray 中的所有块,并且可以通过设置options(arrow.int64_downcast = FALSE)
来禁用此转换(以便Int64
始终产生bit64::integer64
向量)。 - 除了在 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
Bug 修复
- 使用
%in%
表达式过滤具有多个分区键的 Dataset 现在忠实地返回所有相关的行 - Datasets 现在可以在根目录中包含以
.
或_
开头的路径段; 以这些前缀开头的文件和子目录仍然被忽略 -
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
) - 在转换为 Arrow RecordBatch 和 table 时,R
attributes()
保留在 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,而无需更改任何其他代码。
Datasets
- 现在支持 CSV 和其他文本分隔的数据集
- 通过自定义 C++ 构建,可以通过传递像
ds <- open_dataset("s3://...")
这样的 URL 来直接在 S3 上读取数据集。 请注意,这目前需要一个具有额外依赖项的特殊 C++ 库构建——这在 CRAN 版本或 nightly 包中尚不可用。 - 读取单个 CSV 和 JSON 文件时,会自动从文件扩展名检测压缩
其他增强功能
- C++ 聚合方法的初始支持:
sum()
和mean()
已为Array
和ChunkedArray
实现 - Tables 和 RecordBatches 具有其他类似 data.frame 的方法,包括
dimnames()
和as.list()
- Tables 和 ChunkedArrays 现在可以通过
reticulate
移动到/从 Python 移动
Bug 修复和弃用
- 当传递给 Arrow 内存时,非 UTF-8 字符串(在 Windows 上很常见)会被正确地强制转换为 UTF-8,并在转换为 R 时被适当地重新本地化
- 现在已正确实现
write_parquet()
的coerce_timestamps
选项。 - 如果用户提供,创建 Dictionary 数组会尊重
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 读取的各种 Bug 修复
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")
。
Datasets
- Dataset 读取受益于 C++ 库中的许多加速和修复
- Datasets 有一个
dim()
方法,该方法对所有文件中的行进行求和 (#6635, @boshek) - 使用
c()
方法将多个数据集组合成一个可查询的UnionDataset
- Dataset 过滤现在将
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
的类型,并在所有列表元素都是相同类型时创建 ListArray (#6275, @michaelchirico)
arrow 0.16.0
CRAN 发布:2020-02-09
多文件数据集
此版本包含 Arrow Datasets 的 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
s 和RecordBatch
es 也有dplyr
方法。 - 对于没有
dplyr
的探索,Tables、RecordBatches、Arrays 和 ChunkedArrays 的[
方法现在支持自然行提取操作。 这些使用 C++Filter
、Slice
和Take
方法进行高效访问,具体取决于选择向量的类型。 - 还添加了一个实验性的、延迟评估的
array_expression
类,除了其他事项外,还可以使用 Arrays 的某些函数(例如arrow_table[arrow_table$var1 > 5, ]
)来过滤 Table,而无需首先将所有内容拉入 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 交互的人应该使用这些对象和方法。 作为此更改的一部分,为了支持
Class$create()
方法,已删除许多实例化这些 R6 对象的函数。 值得注意的是,已删除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
s 一样使用它们。 提取列、子集等等。 有关示例,请参见?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)