[英]Create parquet file directory from CSV file in R
我遇到越来越多的情况,我需要在 R 中使用内存不足 (OOM) 方法进行数据分析。 我熟悉其他 OOM 方法,例如sparklyr
和DBI
,但我最近遇到了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.