我正在使用以下代码
ORT<-sqlQuery(channel, "Select ort FROM test")
ORT<-ORT[,c("ort")]
ORT<-as.list(ORT)
ORT <- parLapply(cl,ORT,function(ORT) cleanup(ORT))
sqlSave(channel, ORT,tablename="table_name1")
首先我将我的Sql数据库的一列加载到R中,工作正常。接下来我想使用并行包运行一个函数。第一个问题是,ORT需要是一个字符向量,但Sql将向量作为数据帧导入。有没有快速的转换方式?由于向量包含1000万个条目。
下一个问题是:如何将数据向量保存回数据库,我的sqlSave命令不起作用!
答案 0 :(得分:0)
执行ORT<-ORT[,c("ort")]
时,我怀疑R正在分配新内存并复制ORT$ort
的内容。如果您只保留数据框并将ORT$ort
传递给parLapply
,则可以跳过此步骤。 (另请注意,您不需要as.list
步。parLapply
接受向量。)
如果这是你分析的缓慢部分,我会感到惊讶。读取和写入数据库通常比分配新向量花费更长的时间。
如果您希望将结果作为向量以便与sqlSave
一起使用,请使用parSapply
代替parLapply
。