在 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
使用 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) 增强您的实例
我设法将我从 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
使用 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) 增强您的实例