在 R 中使用 parquet 处理大数据集

问题描述 投票:0回答:1

目前,我正在 R 计算机中处理巨大的数据集(9000 万行和 30 列),但是当时我只需要分析一些列和行,并且需要以有效的方式进行此操作。

我的原始数据位于

dta
中,但我转换为
parquet
因为消耗较低的内存和读取时间。然而,加载此数据集需要大量 RAM 和时间。在这篇文章中R:从镶木地板文件中读取前n行?我发现通过使用函数
arrow::open_dataset
利用惰性求值可以使某些操作更快。但我还在文档中发现,
arrow::read_parquet
只能选择带有参数
col_select
的所需列,这使得读取过程更快。是否可以将这两种技术结合起来使过程更加高效?

r database parquet
1个回答
1
投票

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()
© www.soinside.com 2019 - 2024. All rights reserved.