sqlite 如何加快导入到data.frame?

kokeuurv  于 2023-06-23  发布在  SQLite
关注(0)|答案(1)|浏览(143)

我需要分析一个大型数据集(约40Go,300万行);太大而无法在电子表格或R中打开。为了解决这个问题,我将它加载到SQLite数据库中,然后使用R(和RSQLite)将其拆分为我可以操作的部分(70,000行)。我需要 Dataframe 格式。我使用as.data.frame

#Connecting to the database
con = dbConnect(drv=RSQLite::SQLite(),dbname="path")

#Connecting to the table
d=tbl(con, "Test")

#Filter the database and convert it
d %>% 
   #I filtered using dplyr
   filter("reduce number of rows") %>% 
   as.data.frame()

它工作,但需要很多时间。如何让它更快(我的RAM有限)?我也试过setDT(),但它不适用于SQLite数据:

d %>% setDT()

Error in setDT(.) : 
All elements in argument 'x' to 'setDT' must be of same length, but the profile of input lengths (length:frequency) is: [2:1, 13:1]
The first entry with fewer than 13 entries is 1
krugob8w

krugob8w1#

要使用问题中的con处理连续70000行的块,请将下面的print语句替换为所需的任何处理(base、dplyr、data.table等)。

rs <- dbSendQuery(con, "select * from Test")
while(!dbHasCompleted(rs)) {
  dat <- dbFetch(rs, 70000)
  print(dim(dat)) # replace with your processing
}
dbClearResult(rs)
dbDisconnect(con)

相关问题