Si applica a
Revolution Analytics

Se si tenta di utilizzare più connessioni ODBC attraverso i thread di lavoro parallelizzata potrebbe avere esito negativo come nell'esempio seguente:

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"

Il problema è che i processi di lavoro di ricevere le connessioni ODBC come chiuso.In questo caso è che le connessioni sono specifici di processo, in modo meno che i lavoratori condividono il processo padre (come lavoratori multicore creati tramite duplicazione), le connessioni del padre non possono essere condivisa dai lavoratori. Per distribuire i calcoli di ODBC per i lavoratori non duplicata, stabilire le connessioni presenti in ciascun lavoratore come parte dell'attività distribuita.Esempio:

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

Serve aiuto?

Vuoi altre opzioni?

Esplorare i vantaggi dell'abbonamento e i corsi di formazione, scoprire come proteggere il dispositivo e molto altro ancora.