Proovite kasutada mitu ODBC ühendust parallelized töötaja teemad ei pruugi nagu järgmises näites:
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"
Probleem on töötaja protsesside saada ODBC ühendused suletud.
Siin on ühendused on protsess seotud nii, et kui töötajad jagavad peamine protsess (nagu mitmetuumalise töötajate loonud kaudu forking), vanema ühendused ei saa ühiselt töötajad. ODBC-kahestunud töötajatele arvutuste levitada luua ühendused iga töötaja jaotatud ülesande osana.
Näide:
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')})