full_join() r 中分段/批次中的两个数据帧
Posted
技术标签:
【中文标题】full_join() r 中分段/批次中的两个数据帧【英文标题】:full_join() two data frames in segments/batches in r 【发布时间】:2019-02-26 20:16:48 【问题描述】:我有两个要合并的数据框。
df1
的维度为 20015 行和 7 个变量。
df2
的维度为 8534664 行和 29 个变量。
当我执行full_join(df1, df2, by = "KEY")
时,我得到了Error: cannot allocate vector of size 891.2 Mb
,所以我设置了memory.limit(1000000)
,但我仍然得到同样的错误。我运行full_join()
,同时在 Windows 任务管理器中查看我的 CPU 使用率图表,它呈指数级增长。我还在代码中使用了gc()
。
我的问题是,是否有一个函数可以加入第一行 1,000,000
行。休息一下,然后加入下一个 1,000,000
行等,直到所有行都已加入。
有没有批量运行full_join()
的功能?
【问题讨论】:
尝试使用 data.table 加入,这在内存使用方面非常简洁......请参阅此处如何执行:***.com/questions/15170741/… 【参考方案1】:这只是为了报告在 64 位 Windows 系统(Intel ~3.5 Ghz,RAM 120GB)中从 data.table
运行 full_join
和 merge
所需的时间。希望它至少可以作为您案例的参考。
library(data.table)
df1 <- data.table(KEY=sample(1:800,20015,replace = TRUE),
matrix(rnorm(20015*7),20015,7))#1.1MB
df2 <- data.table(KEY=sample(1:800,8534664,replace = TRUE),
matrix(rnorm(8534664*29),8534664,29))#1.9GB
library(dplyr)
tick <- Sys.time()
df_join <- full_join(df1, df2, by = "KEY") #~58.1 GB in memory
tock <- Sys.time()- tick #~1.85min
#With data.table merge.
tick <- Sys.time()
df_join<- merge(df1, df2, by = "KEY", allow.cartesian = TRUE)#~58.1 GB in memory
tock <- Sys.time() - tick #~5.75 mins
【讨论】:
以上是关于full_join() r 中分段/批次中的两个数据帧的主要内容,如果未能解决你的问题,请参考以下文章
R dplyr full_join - 没有公共键,需要公共列混合在一起