gpt4 book ai didi

r - 使用r将多个csv文件导入postgresql数据库(内存错误)

转载 作者:行者123 更新时间:2023-12-04 10:11:46 26 4
gpt4 key购买 nike

我正在尝试将数据集(包含许多 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)
})
}

关于r - 使用r将多个csv文件导入postgresql数据库(内存错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61304571/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com