gpt4 book ai didi

optimization - 将巨大的矢量发送到 R 中的数据库

转载 作者:行者123 更新时间:2023-12-03 17:09:09 25 4
gpt4 key购买 nike

下午好

在计算出一个相当大的向量(比 2^20 个元素短一点)后,我必须将结果存储在数据库中。

脚本执行大约需要 4 个小时,使用简单的代码,例如:

#Do the processing
myVector<-processData(myData)
#Sends every thing to the database
lapply(myVector,sendToDB)

您认为最有效的方法是什么?

我考虑过使用相同的查询来插入多条记录(多次插入),但它只是返回到“夹持”数据。

是否有任何矢量化函数可以将其发送到数据库中?

有趣的是,代码在开始处理向量的第一个元素之前花费了大量时间。也就是说,如果我在 sendToDB 中放置一个 browser() 调用,它需要 20 分钟才能第一次到达(我的意思是 20 分钟而不考虑前一行处理数据)。所以我想知道这段时间 R 在做什么?

是否有另一种方法可以在 R 中执行我可能错过的此类操作(可能是并行处理?)

谢谢!

PS:这里是 sendToDB 函数的骨架:

sendToDB<-function(id,data) {
channel<-odbcChannel(...)
query<-paste("INSERT INTO history VALUE(",id,",\"",data,"\")",sep="")
sqlQuery(channel,query)
odbcClose(channel)
}

就是这个想法。

更新

我现在正在尝试 LOAD DATA INFILE 命令。

我仍然不知道为什么第一次到达lapply的内部函数需要这么长时间。

解决方案

LOAD DATA INFILE 确实要快得多。使用 write 逐行写入文件是经济实惠的,而 write.table 甚至更快。

我在 lapply 中遇到的开销是因为我在遍历 POSIXct 对象。使用 seq(along.with=myVector) 然后在循环内处理数据要快得多。

最佳答案

将它写入某个文件并调用 LOAD DATA INFILE 怎么样?这至少应该给出一个基准。顺便说一句:您使用哪种 DBMS?

关于optimization - 将巨大的矢量发送到 R 中的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3183639/

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