AWS의 Athena 데이터베이스에서 largish 데이터 세트가 있습니다. 여기에 내가 노력하고 무엇을 나는 병렬 그것에서 읽고 싶은, 그리고 내가 RJDBC
AWS의 Athena (AWS) 데이터베이스에서 병렬 읽기,
을 사용하고
R.
내에서 분기에foreach
패키지의 접근 방식에 익숙해있어 :
out <- foreach(i = 1:length(fipsvec), .combine = rbind, .errorhandling = "remove") %dopar% {
coni <- dbConnect(driver, "jdbc:awsathena://<<location>>/",
s3_staging_dir="my_directory",
user="...",
password="...")
print(paste0("starting ", i))
sqlstring <- paste0("SELECT ",
"My_query_body"
fipsvec[i]
)
row <- fetch(dbSendQuery(coni, sqlstring), -1, block = 999)
print(i)
dbDisconnect(coni)
rm(coni)
gc()
return(row)
}
가 (미안이 재현 할 수 없습니다 -. 내가 분명히 온라인 DB의 열쇠를 손 수) 나는이 프로그램을 실행할 때
가 첫 번째 c = number of cores
단계는 잘 실행하지만, 다음이 정지하고 아무것도하지 않는다 - indefi 니딜리 내가 말할 수있는 한. htop
은 모든 코어에서 아무런 활동도 보이지 않습니다. 그리고 for 루프가 c
개 이상의 루프로 바뀌면 결과는 기대 한 것입니다. 병렬에서 직렬로 변경하면 (대신 %dopar%
) 잘 작동합니다.
연결이 제대로 닫히지 않았거나 중복 된 것으로 정의되는 것과 관련이 있습니까? 병렬 루프 내에 연결을 배치 했으므로 각 코어는 자체 환경에서 자체 연결을 가져야합니다. 하지만 충분히 명확한 지 여부를 알기 위해 데이터베이스에 대해 충분히 알지 못합니다.
여기에 어떤 일이 벌어지고 있는지 이해하는 데 도움이되는 답변을 보내 주시면 감사하겠습니다.이 시점에서 나에게 부두입니다.
그것은'.packages' 인수하지 않습니다. 내 경험에 의하면 이것은 Windows 시스템에서만 중요합니다. 그리고 어쨌든 4 코어 인스턴스에서 4 개 이상의 항목을 반복 할 때 병렬 스크립트가 올바르게 작동합니다. 따라서 각 스레드는 하나의 반복 만 수행 할 수 있습니다. 지금 운전 기사를 옮기는 중 ... –
시도 할 또 다른 단계는 % dopar % 환경의 첫 번째 줄에'.jinit (force.init = TRUE)'행을 포함시킬 수도 있습니다. (하지만 저는이 시점에서 정말로 침을 뱉고 있습니다. 자바쪽에 대한 단단한 이해가 필요 없습니다.) –
내부에서 드라이버 호출을 이동해도 도움이되지 않습니다. 'harmonize' 브랜치를 지금 시도 할 것입니다 - 제가 이것을 병렬로하려고하는 이유는 큰 덩어리를 메모리로 읽어들이려고 할 때 에러가 발생한다는 것입니다. 나는 단지 약 1e5 행을 가지고 있지만, 나는 3000 개의 열을 가지고 있으며, 나는 그것들의 대부분을 필요로한다. –