Bandant naudoti kelis ODBC ryšius parallelized darbuotojo gijomis gali nepavykti, kaip parodyta pavyzdyje:
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"
Problema yra vartotojo procesų gauti ODBC ryšiai neveikia.
Problema čia yra ta ryšių procesas būdingas, išskyrus atvejus, kai darbuotojai naudojasi pirminis procesas (kaip kelių branduolių darbuotojų sukurtas naudojant šakojimasis), tėvų ryšiai negali būti bendrinami, darbuotojai. Paskirstyti skaičiavimai ODBC-išsišakojęs darbuotojams, sukurti ryšius kiekvienam darbuotojui kaip paskirstytasis užduotis.
Pavyzdys:
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')})