【发布时间】:2015-09-24 12:18:59
【问题描述】:
我有一个大小为 11 GB 和 16 GB RAM(与操作系统等共享)的 SQLite-db。我想用 data.table 执行子集方法:
# database connection
con = dbConnect(dbDriver("SQLite"), dbname=sqlite_database)
# read table from database
inventory <- as.data.table(dbGetQuery( con,'select * from inventory'))
# subset table
unfulfilled_inventory <- inventory[period >= stableStateStart, .(period, articleID, unfulfilledQuantities, backlog, stock)]
获得更多 RAM 将是解决此问题的最便宜的方法,但不幸的是,这不是一种选择。
库存对象有 127,500,000 行,包含 6 个变量。清单对象在内存中分配的大小为 5.2 GB。
dim(unfulfilled_inventory)
[1] 127500000 6
有没有办法以更节省内存的方式进行此子集化?我尝试为矢量扫描构建一个矢量,但结果相同。或者有没有办法为此操作使用交换空间(我并不关心速度)。
【问题讨论】:
-
确认一下,
5.2GB是哪个对象?还有dim(inventory)的结果是什么? -
更新了问题
标签: r memory data.table subset