我尝试使用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提供任何选项/参数。所以我无法理解,如果我仍然有足够的RAM来运行它,为什么它会报告完整的数据库或磁盘...