我正在尝试使用 sqldf 从 R 中的数据框中选择一些子集。所以我的代码看起来像:
library("sqldf")
...
usecase <- as.data.frame(use_case_list[[i]])
user_day_view <- sqldf("select distinct targetuser, day, count(*) from usecase group by targetuser,day")
...
总而言之,我在 for / foreach 循环中执行了大约 80-90 个这样的 sqldf 查询。
它在测试数据集上运行良好,但是,当我尝试在真实数据集(大约 21 Gb 的数据)上运行它时,它有时会失败并显示以下错误消息:
"rsqlite_query_fetch: failed first step: database or disk is full"
此时,一个 R 进程使用大约 60 Gb RAM,但我仍然有几个 Tb RAM 可用...
我检查了 sqldf 的文档(https://cran.r-project.org/web/packages/sqldf/sqldf.pdf),它明确说,
"For SQLite and h2 data bases this defaults to ":memory:" which results in an embedded database"
所以我应该有一个内存中的 SQLite 数据库,因为我没有以任何方式初始化它,也没有向 sqldf 提供任何选项/参数。所以我不明白,如果我仍然有足够的内存来运行它,为什么它会报告完整的数据库或磁盘......