繁体   English   中英

从 R 中的 CSV 文件创建 parquet 文件目录

[英]Create parquet file directory from CSV file in R

我遇到越来越多的情况,我需要在 R 中使用内存不足 (OOM) 方法进行数据分析。 我熟悉其他 OOM 方法,例如sparklyrDBI ,但我最近遇到了arrow并想进一步探索它。

问题是我通常使用的平面文件足够大,以至于在没有帮助的情况下无法将它们读入 R。 因此,理想情况下,我更喜欢一种进行转换的方法,而无需首先将数据集读入 R。

您能提供的任何帮助将不胜感激!

arrow::open_dataset()可以处理文件目录并查询它们,而无需将所有内容读入 memory。 如果您确实想将数据重写到多个文件中,可能由数据中的一列或多列分区,您可以将数据集 object 传递给write_dataset()

一个(临时)警告:从 {arrow} 3.0.0 开始, open_dataset()只接受一个目录,而不是单个文件路径。 我们计划在下一个版本中接受单个文件路径或离散文件路径列表(请参阅问题),但现在如果您只需要读取包含其他非数据文件的目录中的单个文件,您将需要将其移动/符号链接到一个新目录并打开它。

你可以这样做:

library(arrow)
library(dplyr)
 
csv_file <- "obs.csv"
dest <- "obs_parquet/" 

sch = arrow::schema(checklist_id = float32(),
                    species_code = string())

csv_stream <- open_dataset(csv_file, format = "csv", 
                           schema = sch, skip_rows = 1)

write_dataset(csv_stream, dest, format = "parquet", 
              max_rows_per_file=1000000L,
              hive_style = TRUE,
              existing_data_behavior = "overwrite")

在我的情况下(56GB csv 文件),我对生成的镶木地板表有一个非常奇怪的情况,因此请仔细检查您的镶木地板表以发现原始 csv 中不存在的任何时髦的新行。 我提交了一份关于它的错误报告:

https://issues.apache.org/jira/browse/ARROW-17432

如果您也遇到同样的问题,请使用 Python 箭头库将 csv 转换为 parquet,然后将其加载到 R。 该代码也在 Jira 票证中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM