目前,我正在 R 计算机中处理巨大的数据集(9000 万行和 30 列),但是当时我只需要分析一些列和行,并且需要以有效的方式进行此操作。
我的原始数据位于
dta
中,但我转换为 parquet
因为消耗较低的内存和读取时间。然而,加载此数据集需要大量 RAM 和时间。在这篇文章中R:从镶木地板文件中读取前n行?我发现通过使用函数arrow::open_dataset
利用惰性求值可以使某些操作更快。但我还在文档中发现,arrow::read_parquet
只能选择带有参数col_select
的所需列,这使得读取过程更快。是否可以将这两种技术结合起来使过程更加高效?
FWIW,这是一个基于内置
airquality
数据集的最小可重现示例,该数据集将 arrow::open_dataset()
与某些行和列的动态选择相结合以减少开销。请参阅使用 Arrow 数据集和 dplyr 以获取更全面的概述。
library(arrow)
library(dplyr)
## write sample .parquet data
dat = transform(
airquality
, Year = 1973
)
write_dataset(
dat
, path = "~/Downloads/airquality"
, format = "parquet"
, partitioning = c(
"Year"
, "Month"
)
, basename_template = "data-part-{i}.parquet"
, existing_data_behavior = "overwrite"
, compression = "gzip"
)
## read subset of rows and columns back into r
open_dataset(
"~/Downloads/airquality"
) |>
# subset by rows
filter(
Month == 6L
) |>
# subset by columns
select(
Day
, Temp
) |>
collect()