Анализ больших данных в R на сервере EC2 - PullRequest
0 голосов
/ 03 февраля 2020

Мне удалось загрузить и объединить 6 тяжелых файлов Excel из моего экземпляра RStudio (на сервере EC2) в одну таблицу в PostgreQSL (связана с RDS).

Теперь в этой таблице есть 14 столбцов и 2,4 миллионов строк.
Размер таблицы в PostgreSQL равен 1059MB .
Экземпляр EC2 является t2.medium .

Я хотел проанализировать его, поэтому подумал, что могу просто загрузить таблицу с пакетом DBI и выполнить с ним различные операции.

Итак, я сделал:

my_big_df <- dbReadTable(con, "my_big_table")
my_big_df  <- unique(my_big_df)

и мой RStudio завис, не хватает памяти ...

Мои вопросы будут такими:
1) Является ли то, что я делал (для обработки больших таблиц, подобных этой), хорошей / хорошей практикой?
2) Если да - 1), это единственный способ быть в состоянии выполнить операцию unique() или другие подобные операции для увеличения памяти сервера EC2?
3) Если да, то 2), как я могу узнать, в какой степени мне следует увеличить память сервера EC2?

Спасибо !

1 Ответ

1 голос
/ 03 февраля 2020

dbReadTable преобразовать всю таблицу в data.frame, что не является тем, что вы хотите сделать для таких больших таблиц.

Как сказал @cory, вам нужно извлечь необходимую информацию, используя SQL запросов. Вы можете сделать это с помощью DBI, используя комбинации dbSendQuery, dbBind, dbFetch или dbGetQuery.

Например, вы можете определить функцию для получения необходимых данных

filterBySQLString <- function(databaseDB,sqlString){
    sqlString <- as.character(sqlString)
    dbResponse <- dbSendQuery(databaseDB,sqlString)
    requestedData <- dbFetch(dbResponse)
    dbClearResult(dbResponse)

    return(requestedData)
}

# write your query to get unique values
SQLquery <- "SELECT * ...
             DISTINCT  ..."

my_big_df <- filterBySQLString(myDB,SQLquery)
my_big_df  <- unique(my_big_df)

Если вы не можете использовать SQL, тогда у вас есть два варианта:

1) прекратить использование Rstudio и попытаться запустить код с терминала или через Rscript.

2) усилить свой экземпляр

...