היכנס דרך Microsoft
היכנס או צור חשבון.
שלום,
בחר חשבון אחר.
יש לך חשבונות מרובים
בחר את החשבון שברצונך להיכנס באמצעותו.

מנסה להשתמש בחיבורים מרובים של ODBC על-פני להליכי עבודה parallelized עלול להיכשל כמו בדוגמה הבאה:

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 כסגורה.

הבעיה כאן היא חיבורי הם תהליך ספציפי, כך אלא אם כן עובדי משתף את תהליך האב (כמו עובדי multicore שנוצרו באמצעות ההסתעפות), ניתן לשתף התקשרויות האב על-ידי עובדים. להפצת חישובים ODBC ב- forked לעבודה, ליצור את החיבורים על כל עובד כחלק פעילות מבוזרת.

דוגמה:

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


זקוק לעזרה נוספת?

הרחב את הכישורים שלך

סייר בהדרכה >

קבל תכונות חדשות לפני כולם

הצטרף ל- INSIDERS של MICROSOFT 365

האם מידע זה היה שימושי?

עד כמה אתם מרוצים מאיכות השפה?
מה השפיע על החוויה שלך?

תודה על המשוב!

×