微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

结合dtplyr和multidplyr处理大型mutate操作

如何解决结合dtplyr和multidplyr处理大型mutate操作

我正在结合 dtplyrmultidplyr 库来处理在非常大的数据库上执行的一些基本变异/汇总操作。 final_db_partition,合并后有时30m行。

我不知道是我做错了什么,但 R 会话中止了还是我的记忆结束了。

R 版本 4.0.5 (2021-03-31) / 平台:x86_64-apple-darwin17.0(64 位)/ 运行于:macOS Big Sur 10.16

我应该如何解决这个问题?

library(multidplyr)
library(dtplyr)
library(dplyr,warn.conflicts = FALSE)
library(data.table)
library(stringr)


default_cluster(parallel::detectCores()-1)
cluster_library(default_cluster(),'dplyr')
cluster_library(default_cluster(),'stringr')

db1 <- db1 %>% 
    data.table::data.table() %>% 
    lazy_dt(immutable = FALSE) 
  
  db2 <- db2 %>% 
    data.table::data.table() %>% 
    lazy_dt(immutable = FALSE)  

final_db_partition <- db1 %>% 
    left_join(db2)  %>% 
    as.data.frame() %>% 
    group_by(id) %>% 
    partition(cluster = default_cluster()) 

final_db <- final_db_partition %>% 
    as.data.table() %>% 
    #lazy_dt(immutable = FALSE)  %>% 
    mutate(m1=ifelse(stringi::stri_detect_regex(m_destination,paste0("\\b",m_origin,"\\b")),1,0)) %>% 
    as.data.frame() %>% 
    group_by(across(c(-v1,-v2,-v3))) %>% 
    summarise(finalv1 = sum(finalv1,na.rm=T),finalv2 = sum(finalv2,na.rm=T)) %>% 
    collect() 


版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。