Podjęto próbę użycia wielu połączeń ODBC całej wątków roboczych jednordzeniowym mogą nie działać tak jak w następującym przykładzie:
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"
Problem polega na pewno procesy robocze odbierania połączeń ODBC jako zamknięte.
Zagadnienie jest, że połączenia są specyficzne dla procesu, więc chyba, że pracownicy są udostępnianie procesu nadrzędnego (jak pracownicy wielordzeniowych utworzony za pośrednictwem Rozwidlenie), połączenia obiektu nadrzędnego nie może być współużytkowana przez pracowników. Aby rozpowszechnić ODBC obliczeń dotyczących pracowników-odłam, należy ustanowić połączenia na każdego pracownika jako część zadań rozproszonych.
Przykład:
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')})