Мне нужно импортировать данные за 8 лет, где каждый месяц содержит cca. 360.000 наблюдений, и у каждого есть 75 переменных. Данные хранятся в SQL Server.
Я пытался импортировать его из года в год по этому коду, но окончательный фрейм данных не создан. Кроме того, r
должно соответствовать всем годам, но каждое значение одинаково.
Это мой код:
library(foreach)
library(doParallel)
numCores <- detectCores()
system.time({
nr_years <- 8
start_year <- 2010
registerDoParallel(numCores)
steps <- foreach::foreach(icount(nr_years), .combine = rbind) %dopar% {
next_year <- start_year +1
date_before <- paste0(start_year, '-12-31', sep = '')
date_end <- paste0(next_year, '-12-31', sep = '')
myQuery <- RxSqlServerData(sqlQuery = sprintf("SELECT DATE,CLIENT_NO,MAT_ST
FROM DBO.DATA_TABLE
WHERE DATE >='%s' and DATE <= '%s'", date_before, date_end), connectionString = connStr, returnDataFrame = TRUE)
my_df <- rxImport(myQuery)
#start_year <- start_year + 1
}
})
Я протестировал код, заменив %dopar%
на %do%
: кадры данных не были объединены, но переписаны (объект steps
был верным).
Однако я хочу, чтобы данные импортировались параллельно, и в конце все годы должны быть связаны в фрейме данных my_df
.
Примечание
Я обнаружил, что в случае %dopar%
результаты последней строки функции foreach
сохраняются в steps
(поэтому я прокомментировал последнюю строку). Однако данные по-прежнему не rbinded
, а содержат только результаты первой итерации.