在 EC2 服务器上用 R 分析大数据

Analyze big data in R on EC2 server

我设法将我从 RStudio 实例(在 EC2 服务器上)获得的 6 个重 excel 文件加载并合并到 PostgreQSL(与 RDS 链接)中的一个 table 中。

现在这个 table 有 14 列和 2,4 百万行。
PostgreSQL 中 table 的大小是 1059MB.
EC2 实例是 t2.medium.

我想分析它,所以我想我可以简单地加载 table 和 DBI 包并对其执行不同的操作。

所以我做了:

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

我的 RStudio 死机了,内存不足...

我的问题是:
1) 我一直在做的事情(像这样处理大 table)是一种 ok/good 实践吗?
2)如果1)是,是不是只能执行unique()操作或其他类似操作来增加EC2服务器内存?
3) 如果 2) 是,我怎么知道我应该将 EC2 服务器内存增加到什么程度?

谢谢!

dbReadTable 将整个 table 转换为一个 data.frame,这不是您想要对这么大的 table 做的事情。

正如@cory 告诉您的那样,您需要使用 SQL 查询来提取所需的信息。 您可以使用 DBI 使用 dbSendQuerydbBinddbFetchdbGetQuery.

的组合来做到这一点

例如,您可以定义一个函数来获取所需的数据

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) 增强您的实例