阅读 parquet 文件的前n行?

8tntrjer  于 2023-02-20  发布在  其他
关注(0)|答案(2)|浏览(233)

我知道parquet是一种列格式,但是对于大文件,有时候你不想在过滤之前把它全部读到R的内存中,前1000行左右可能就足够测试了。
我在这里看到了Pandas的一个解决方案,以及c# here的一个选项,这两个选项对我来说都不明显,它们如何转换为R。

tkclm6bt

tkclm6bt1#

感谢乔恩和丹指出了正确的方向。
arrow::open_dataset()允许延迟求值(docs [here][1]),您可以从中获取head()(但不能获取slice()),或filter()。此过程更快,使用的峰值内存更少。示例如下。

# 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
4c8rllxm

4c8rllxm2#

我发布这个简单的包是为了实际使用。https://github.com/mkparkin/Rinvent可以随时检查是否有帮助。有一个名为“sample”的参数,它可以带来样本行。它也可以读取“delta”文件
读取Parquet地板R(读取路径=“C:/用户/...",格式=“delta”,样本=10)或读取Parquet地板R(读取路径=“C:/用户/...",格式=“Parquet地板”,样本=10)

相关问题