병렬화 된 작업자 스레드 간에 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')})