Gäller förRevolution Analytics

Försök att använda flera ODBC-anslutningar över parallelized arbetstrådar misslyckas som i följande exempel:

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"

Problemet är att arbetsprocesserna får ODBC-anslutningar som stängd.Problemet här är att anslutningar är processpecifika förhållanden så om arbetstagarna delar den överordnade processen (som i multicore arbetare som skapats via onödiga kostnader), den överordnade anslutningar inte kan delas med arbetstagarna. Om du vill distribuera ODBC-beräkningar på icke forked arbetare att upprätta anslutningar på varje arbetstagare som en del av distribuerade aktivitet.Exempel:

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

Behöver du mer hjälp?

Vill du ha fler alternativ?

Utforska prenumerationsförmåner, bläddra bland utbildningskurser, lär dig hur du skyddar din enhet med mera.