Открываю соединение с Vertica через RODBC, затем запускаю функцию rfsrc из пакета randomForestSRC, после чего соединение теряется. Даже проводная вещь заключается в том, что при запуске функции rfsrc для некоторого набора данных соединение поддерживалось, а для некоторых других соединение терялось.RODBC потеряет соединение после запуска randomForestSRC
Вот код: (я использую последнюю версию пакета randomForestSRC и RODBC)
library(parallel)
library(randomForestSRC)
library(RODBC)
data(veteran, package = "randomForestSRC")
data(breast, package = "randomForestSRC")
data(pbc, package = "randomForestSRC")
data(wihs, package = "randomForestSRC")
data(follic, package = "randomForestSRC")
db_str <- "**********************"
bi_con <- odbcDriverConnect(db_str, believeNRows=FALSE,rows_at_time=100000)
sql <- "insert into testing123 values('abcd');"
result <- sqlQuery(bi_con, sql)
print(result)
cat("\r\n")
#obj1 <- rfsrc(status ~ ., data = breast, nsplit=10) # lose connection
#obj2 <- rfsrc(Surv(time, status)~., data = veteran, nsplit = 10, ntree = 100) # works
#obj3 <- rfsrc(Surv(days,status) ~ ., pbc, nsplit = 10) # works
#obj4 <- rfsrc(Surv(time, status) ~ ., wihs, nsplit = 3, ntree = 100) # works
#obj5 <- rfsrc(Ozone ~ ., data = airquality) # works
obj6 <- rfsrc(Species ~., data = iris) # lose connection
#obj7 <- rfsrc(Surv(time, status) ~ ., follic, nsplit = 3, ntree = 100) # lose connection
sql <- "insert into testing123 values('abcde')"
result <- sqlQuery(bi_con, sql)
print(result)
odbcClose(bi_con)
На данный момент, я думаю, это потому, что сбор мусора из R удалить и закрыть соединение с базой данных. Может ли кто-нибудь помочь в этом? Благодарю.
Вот сообщение об ошибке:
[1] "HY000 10 [Vertica][VerticaDSII] (10) An error occurred during query preparation: no connection to the server\n"
[2] "[RODBC] ERROR: Could not SQLExecDirect 'insert into testing123 values('abcde')'"
Вот минимальная версия скрипта, который я бегу на своей машине:
library(randomForestSRC)
library(RODBC)
db_str <- "********************************"
bi_con <- odbcDriverConnect(db_str, believeNRows=FALSE,rows_at_time=1)
sql <- "insert into testing123 values('abcd');"
result <- sqlQuery(bi_con, sql)
print(result)
cat("\r\n")
obj <- rfsrc(Species ~., data = iris) # lose connection
sql <- "insert into testing123 values('abcdef')"
result <- sqlQuery(bi_con, sql)
print(result) # this line will produce the error message above
После наблюдения набора данных, disfference между соединительными и неразрывными наборами данных состоит в том, что весь набор данных, который разрушает соединение rodbc, содержит нечетный столбец (колонку строк) и весь набор данных, которые поддерживают стержень Соединение bc содержит только числовой столбец.
Finaly Я использую RJDBC и он хорошо работает с randomForestSRC пакетом
если не фактический обзорный ISN» t, как в вашем примере, нет никакой причины, по которой я вижу, чтобы сбор мусора вступил в игру. Ваши вызовы rfsrc занимают очень много времени? Я ежедневно работаю с RODBC и SQL-сервером, а соединения обычно тайм-аут после некоторой длины – DMT
, хотя тайм-аут не объясняет, почему в вашем прокомментированном коде первый вызов завершается неудачно, но второй вызов выполняется? Это точно, потому что я чувствую, что это не – DMT
@DMT спасибо за ответ. Этот сценарий является полным, который я использую для запуска. Примеры obj1 to obj7 работают с небольшим набором данных и работают в течение 10 секунд для каждого из них. Obj1 приведет к отказу этой строки <- sqlQuery (bi_con, sql) и obj2 не будет. – user1754197