首页 > 解决方案 > 在 EC2 服务器上分析 R 中的大数据

问题描述

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

现在这个表有14列和240万行。PostgreSQL
中的表大小为1059MBEC2实例是 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服务器内存?

谢谢!

标签: rpostgresqlamazon-ec2bigdatadbi

解决方案


dbReadTable将整个表格转换为 a data.frame,对于这么大的表格,这不是您想要做的。

SQL正如@cory 告诉您的那样,您需要使用查询来提取所需的信息。您可以DBI使用 、 或 的组合dbSendQuerydbBind做到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)加强你的实例


推荐阅读