代码之家  ›  专栏  ›  技术社区  ›  user113156

full_join()在r中分段/批处理两个数据帧

  •  1
  • user113156  · 技术社区  · 6 年前

    我有两个数据帧,我正在尝试合并。

    df1 df2

    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 回复  |  直到 6 年前
        1
  •  0
  •   Chriss Paul    6 年前

    full_join merge data.table 在64位Windows系统中(Intel ~ 3.5 Ghz,RAM 120GB)。希望它至少能为您的案例提供参考。

    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