我想使用foreach語法來查詢本地存儲的數據庫。RODBC&foreach
我的代碼看起來像這樣:
h <- odbcDriverConnect(connection)
cl<-makeCluster(no_cores)
registerDoParallel(cl)
foreach(i = 1:dim(Table)[1],
.combine = rbind,
.export = "h",
.packages = "RODBC") %dopar% {
cat(i,"\n")
#h <- odbcDriverConnect(connection)
sqlQuery(query)
}
odbcCloseAll()
stopCluster(cl)
當我使用%做%,而不是%dopar%它工作正常,但是當我試圖使它成爲一個平行我得到這個錯誤:
Error in { : task 1 failed - "first argument is not an open RODBC channel" In addition: Warning message: In e$fun(obj, substitute(ex), parent.frame(), e$data) : already exporting variable(s): h
當我將h放在foreach循環中時,它工作正常,但是我明白在每一步中都會創建連接,我想避免這種情況。有什麼辦法可以將該連接導出到foreach(與其他變量一樣)?
*我想使用foreach語法來查詢本地存儲的數據庫* ...爲什麼?你真正的問題是什麼?還是你在做這個學習? – Parfait
我只需要得到一些不相互關聯的查詢結果,所以我期望這是一個非常平行的問題。我希望這樣我可以更快地獲得結果。我錯了嗎? 但是,即使它沒有讓速度更快,我想知道是否有可能在foreach中導出連接而不是變量 – Swistak