Prøver å bruke flere ODBC-tilkoblinger på tvers av parallelized arbeidstråder mislykkes som i følgende eksempel:

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"

Problemet er arbeidsprosessene motta ODBC-tilkoblinger som lukket.

Problemet her er at tilkoblinger prosess-spesifikke, slik at med mindre arbeiderne deler den overordnede prosessen (som i flerkjerners arbeidere som er opprettet via seg synkroniserer seg), den overordnede tilkoblinger ikke kan deles av arbeiderne. Hvis du vil fordele ODBC-beregninger på forked arbeidere, kan du opprette tilkoblinger på hver arbeideren som en del av den distribuerte oppgaven.

Eksempel:

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


Trenger du mer hjelp?

Utvid ferdighetene dine
Utforsk opplæring
Vær først ute med de nye funksjonene
Bli med i Microsoft Insiders

Var denne informasjonen nyttig?

Hvor fornøyd er du med kvaliteten på oversettelsen?
Hva påvirket opplevelsen din?

Takk for tilbakemeldingen!

×