我在12节点红移群集中有40亿行数据。我成功地使用Rpostgreqsql包连接到它并使用dplyr进行基本数据争用。
但是,我想做一些数据重塑,我通常使用reshape2(dcast)或tidyr(spread)来做。我发现我的数据库对象上都没有执行包。我可以运行“收集”,但这会有问题,因为数据帧太大而无法放入内存(因此我想在DB中运行)。我的总体目标是使用dcast / spread来扩大数据范围,同时在此过程中创建0/1标记。这就像我的机器上的小数据样本的魅力,但在数据库上不太好。
以下是我工作的代码。连接到DB并使用dplyr进行基本过滤。当我尝试使用tidyr / reshape2时,R抛出“类型无法识别”的语法错误
Redshift <- src_postgres('dev',
host = 'xxx.aws.com',
port = 5439,
user = "user",
password = "pwd")
### create table reference ###
df <- tbl(Redshift, "df_cj_allact")
# simple and default R commands analyzing data frames
dim(df)
colnames(df)
head(df)
df2 <- df %>% filter(id != '0') %>% arrange(id, timestamp, category) # seems to work!
# 2157398, was 2306109 (6% loss)
答案 0 :(得分:2)
tidyr包不支持数据库后端。你只能操纵内存数据。 dplyr适用于数据库表以及内存对象。您可以尝试使用具有更大内存的计算机(例如在AWS上)并使用data.table,或者考虑拆分数据。