【问题标题】:R Session Aborted When Reading Large Dataset读取大型数据集时 R 会话中止
【发布时间】:2018-02-14 17:00:00
【问题描述】:

我需要读取约 20,000 个 csv 文件(约 500GB),然后过滤数据并将它们绑定在一起。我的代码在我只读取约 15,000 个文件时有效,但当我读取约 20,000 个文件时它提示“R 会话中止”。

memory.limit(80000)
ReadCustomer = function(x)
 fread(x, encoding = "UTF-8", select = c("customer_sysno", "event_cat2")) %>%
  filter(event_cat2 == "***") %>%
  select(customer_sysno) %>%
  rename(CustomerSysNo = customer_sysno) %>%
  mutate(CustomerSysNo = as.numeric(CustomerSysNo)) %>%
  filter(CustomerSysNo > 0)
CustomerData = rbindlist(lapply(FileList, ReadCustomer))

我尝试将fread(x, encoding = "UTF-8", select = c("customer_sysno", "event_cat2")) 替换为spark_read_csv(sc, "Data", x),但sparkR 仍然无法正常工作。 如何读取所有文件? Rcpp 会有帮助吗?

【问题讨论】:

  • 这个问题与 Rcpp 无关,所以我删除了rcpp 标签。
  • 我也有同样的问题。你曾经修复过它吗?

标签: r data.table sparkr


【解决方案1】:

你知道你从每个文件返回多少行,你不说吗? 您本质上是将此问题视为一个简单的过滤练习;您只需要满足某些条件的 customer_sysno 列。然后你想用它做什么将影响你是否想要将它们合并在一起。

我建议打开一个输出文件并将每个新输出附加到它。然后你就有了一个包含所有你想要的 customer_sysno 值的本地文件。然后,您可以根据您的用例浏览或采样。

如果满足 event_cat2 条件的行实际上是每个文件的一小部分,并且每个文件都很大,那么另一种方法是通过它们读取行,可能与将结果附加到输出文件结合使用。这基本上是要求 R 完成像 (g)awk 这样出色的工作,因此这可能是一个有用的预处理步骤,可以让您获得所需的数据。

【讨论】:

  • 谢谢。我从每个文件中取回大约 10 行。我试图将新输出附加到文件中,但存在同样的问题 - R 会话仍然中止。使用 readLines 问题仍然存在。我会尝试 (g)awk,但我想在 R 中寻求其他解决方案。谢谢。
  • 您收到错误消息吗?它总是试图读取同一个文件吗? (如果您尝试只读取该文件会发生什么?)
猜你喜欢
  • 1970-01-01
  • 2011-04-27
  • 2011-11-09
  • 2018-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-29
  • 2018-03-31
相关资源
最近更新 更多