並列化されたワーカー スレッドの間で複数の 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')})


ヘルプを表示

スキルを磨く

トレーニングの探索 >

新機能を最初に入手

Microsoft Insider に参加する >

この情報は役に立ちましたか?

言語の品質にどの程度満足していますか?
どのような要因がお客様の操作性に影響しましたか?

ご意見をいただきありがとうございます。

×