Намагаються використовувати кілька ODBC, підключення через распараллеліть робочі потоки може не вдатися, як показано нижче:
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"
Проблема полягає в тому, робочих процесів, отримують підключення ODBC, як це працює.
Мова, що підключення до певного процесу, таким чином, якщо робочі є спільний доступ до батьківського процесу (наприклад, багатоядерних виконавці, створені за допомогою породження), батьків підключення не можна використовувати спільно працівників. Розповсюдження ODBC обчислень на-роздвоєною-виконавці, встановити підключення до кожного працівника, входить до складу розподілені завданням. Наприклад: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')})