Pri pokuse o použitie viacerých ODBC pripojenia cez paralelne pracovné podprocesy môže zlyhať v nasledujúcom príklade:
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"
Problém je pracovných postupov prijímať pripojenia ODBC zatvorené.
Problém patrí pripojenia určitý proces, preto ak pracovníci zdieľanie nadradeného procesu (viacjadrových pracovníkov vytvorené pomocou vetvenia), nadradený pripojenia nie je možné zdieľať pracovníci. Distribúciu ODBC výpočty-vidlicový pracovníkov spojenie každému pracovníkovi v rámci distribuovaných úloh.
Príklad:
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')})