r - 在 EC2 服务器上分析 R 中的大数据
问题描述
我设法将我的 RStudio 实例(在 EC2 服务器上)中的 6 个重型 excel 文件加载并合并到 PostgreQSL 中的一个表中(与 RDS 链接)。
现在这个表有14列和240万行。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服务器内存?
谢谢!
解决方案
dbReadTable
将整个表格转换为 a data.frame
,对于这么大的表格,这不是您想要做的。
SQL
正如@cory 告诉您的那样,您需要使用查询来提取所需的信息。您可以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)加强你的实例
推荐阅读
- php - 如何避免 PHP 嵌套 if...else... 条件并编写干净、易于理解的代码?
- php - Magento 2:通过税获得产品价格/特价?
- sql - 在 SQL 中,如何按用户拥有的项目数对用户进行细分?(红移)
- javascript - 事件监听器点击不适用于 ejs 文件
- javascript - 如何使对象在记录时表现为单个许可值,但在分配给变量时充当对象意味着赋予其参考?
- events - 在本地发出 NestJS 事件(进程内 EventPattern 触发器)
- powershell - 将新用户添加到 SharePoint 对象时,集合大小固定错误
- node.js - Express 和 Handlebars:实现多个默认布局
- visual-studio - 与新网络连接后,IP 地址未更新到 IIS
- android - 带有 Flutter 的动态功能模块