在 EC2 服务器上分析 R 中的大数据
Posted
技术标签:
【中文标题】在 EC2 服务器上分析 R 中的大数据【英文标题】:Analyze big data in R on EC2 server 【发布时间】:2020-02-03 16:17:59 【问题描述】:我设法将我从我的 RStudio 实例(在 EC2 服务器上)获得的 6 个繁重的 excel 文件加载并合并到 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服务器内存?
谢谢!
【问题讨论】:
在数据库上运行查询而不是将整个表读入内存? 但我需要使用 SQL 查询,不是吗?即使有这么大的容量,我也不能继续使用 R 吗? 是的,查询 postgresql 数据库需要 SQL 查询。如果您不能使用 SQL,请尝试使用更大的 EC2 实例... 【参考方案1】: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) 增强您的实例
【讨论】:
谢谢@fra!我想我需要习惯不使用 R 进行数据分析的想法......您知道其他可以使用 R 的解决方案吗,例如 Spark(作为 SparkR)?以上是关于在 EC2 服务器上分析 R 中的大数据的主要内容,如果未能解决你的问题,请参考以下文章
Google Big Table与广告服务器数据分析的大查询