Verwenden Sie mehrere ODBC-Verbindungen über parallelisierte Arbeitsthreads kann wie im folgenden Beispiel fehl:
loaddata <- function(cn){
result <- sqlQuery(cn,'select * from boston') return(head(result)) } library(RODBC) cn1 <- odbcConnect("RevoTestDB", uid='RevoTester', pwd='RevoTester') cn2 <- odbcConnect("RevoTestDB", uid='RevoTester', pwd='RevoTester') cn3 <- odbcConnect("RevoTestDB", uid='RevoTester', pwd='RevoTester') cn4 <- odbcConnect("RevoTestDB", uid='RevoTester', pwd='RevoTester') rxSetComputeContext('localpar') system.time ({ z <- rxExec(loaddata, rxElemArg(list(cn1,cn2,cn3,cn4)), packagesToLoad='RODBC') }) Error in do.call(.rxDoParFUN, as.list(args)) : task 1 failed - "first argument is not an open RODBC channel"
Das Problem ist die Arbeitsprozesse ODBC-Verbindung geschlossen werden.
Das Problem ist, dass Verbindungen prozessspezifische, damit, wenn Arbeitskräfte der übergeordnete Prozess (wie multicore Arbeitskräfte Verzweigung erstellt) freigeben, die übergeordnete Verbindungen von den Arbeitnehmern gemeinsam genutzt werden können. Zum Verteilen der ODBC-Berechnung auf nicht gespalten Verbindungsaufbau die für jede Arbeitskraft als Teil der verteilten Aufgabe. Beispiel:loaddata <- function(){library(RODBC)
cn <- odbcConnect("RevoTestDB", uid='RevoTester', pwd='RevoTester') result <- sqlQuery(cn,'select * from boston') return(head(result)) } z <- system.time({z <- rxExec(loaddata, packagesToLoad='RODBC')})