我正在尝试将数据集(包含许多csv文件)导入r,然后将数据写入postgresql数据库的表中。
我已成功连接到数据库,创建了一个导入csv文件的循环并尝试导入。然后R返回错误,因为我的电脑内存不足。
我的问题是:有没有一种创建循环的方法,该循环一个接一个地导入文件,将它们写到postgresql表中,然后再删除它们?这样,我就不会用完内存。
返回内存错误的代码:
`#connect to PostgreSQL database
db_tankdata <- 'tankdaten'
host_db <- 'localhost'
db_port <- '5432'
db_user <- 'postgres'
db_password <- 'xxx'
drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv, dbname = db_tankdata, host=host_db,
port=db_port, user=db_user, password=db_password)
#check if connection was succesfull
dbExistsTable(con, "prices")
#create function to load multiple csv files
import_csvfiles <- function(path){
files <- list.files(path, pattern = "*.csv",recursive = TRUE, full.names = TRUE)
lapply(files,read_csv) %>% bind_rows() %>% as.data.frame()
}
#import files
prices <- import_csvfiles("path...")
dbWriteTable(con, "prices", prices , append = TRUE, row.names = FALSE)`
预先感谢您的反馈!
如果将更lapply()
改为包括匿名功能,则可以读取每个文件并将其写入数据库,从而减少所需的内存量。由于lapply()
充当隐式for()
循环,因此您不需要额外的循环机制。
import_csvfiles <- function(path){
files <- list.files(path, pattern = "*.csv",recursive = TRUE, full.names = TRUE)
lapply(files,function(x){
prices <- read.csv(x)
dbWriteTable(con, "prices", prices , append = TRUE, row.names = FALSE)
})
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句