使用 R 从非常大的 CSV 创建 Parquet 文件夹

Creating a Parquet Folder from a very large CSV with R

提问人:Terryb 提问时间:9/27/2023 最后编辑:OneCricketeerTerryb 更新时间:10/3/2023 访问量:41

问:

我正在尝试使用 R 处理 200GB 的 csv。我正在探索箭头包,并且已经能够使用 open_dataset() 函数指向该文件。

arrow_data <- open_dataset(
  sources = large.csv", 
  format = "csv", 
  schema = schema(
    col1 = string(),
    col2 = string(),
    col3 = string(),
    col4 = string())

我想将数据输出到 parquet 文件夹,以便对数据进行进一步的有效分析。下面的代码看起来是我需要做的,其中write_dataset将在group_var列中为值创建一个文件夹。

arrow_data %>% 
  group_by(group_var) %>% 
  write_dataset(path = pq_path, format = "parquet")

但是,当我运行它时,它会生成几个文件夹,然后失败并出现以下错误。

Error: Invalid: In CSV column #3: Row #12250498: CSV conversion error to string: invalid UTF8 data

在线建议是预先清理 csv,但是,考虑到大小,如何做到这一点似乎很困难,而且我无法有效地阅读它。

谁能就我如何继续提供一些指导?

R Parquet 箭头函数

评论

0赞 MrFlick 9/27/2023
您知道原始 CSV 文件中使用的编码吗?您 100% 确定它使用的是 UTF-8 吗?您是否还确定正确下载了文件的全部内容而没有任何损坏?比如你有没有检查过 MD5 总和或任何东西(如果有的话)?听起来数据已损坏或编码不正确。如果不知道具体是怎么发生的,就很难推荐一个一般的修复方法。
0赞 sconfluentus 9/28/2023
除此之外,200GB 的 CSV 文件不会存在于普通个人计算机的内存中。即使有适当的数据结构,谈判也非常困难。一个好的方法可能是打开连接并读取和写入行。本文提出了一个可行的选择。你可以从几行开始,并测试数据结构问题。dewey.dunnington.ca/post/2017/line-by-line-row-by-row......
0赞 OneCricketeer 10/3/2023
为什么是 parquet 而不是像 DuckDB 或 sqlite 那样加载和处理到数据库/sql 引擎中?

答: 暂无答案