# https://stackoverflow.com/questions/73131505/r-reading-first-n-rows-from-parquet-file
library(dplyr)
library(arrow)
library(tictoc) #optional, used to time results
tic("read all of large parquet file")
my_animals <- read_parquet("data/my_animals.parquet")
toc() # slow and uses heaps of ram
tic("read parquet and write mini version")
my_animals <- open_dataset("data/my_animals.parquet")
my_animals # this is a lazy object
my_animals %>%
#slice(1000L) %>% #doesn't work
head(n=1000L) %>%
# filter(YEAROFBIRTH >= 2010) %>% #also works
compute() %>%
write_parquet("data/my_animals_mini.parquet") # optional
toc() # much faster, much less peak ram used
[1]: https://arrow.apache.org/docs/r/articles/dataset.html
2条答案
按热度按时间tkclm6bt1#
感谢乔恩和丹指出了正确的方向。
arrow::open_dataset()
允许延迟求值(docs [here][1]),您可以从中获取head()
(但不能获取slice()
),或filter()
。此过程更快,使用的峰值内存更少。示例如下。4c8rllxm2#
我发布这个简单的包是为了实际使用。https://github.com/mkparkin/Rinvent可以随时检查是否有帮助。有一个名为“sample”的参数,它可以带来样本行。它也可以读取“delta”文件
读取Parquet地板R(读取路径=“C:/用户/...",格式=“delta”,样本=10)或读取Parquet地板R(读取路径=“C:/用户/...",格式=“Parquet地板”,样本=10)