Gilt für
Revolution Analytics

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')})

Benötigen Sie weitere Hilfe?

Möchten Sie weitere Optionen?

Erkunden Sie die Abonnementvorteile, durchsuchen Sie Trainingskurse, erfahren Sie, wie Sie Ihr Gerät schützen und vieles mehr.