如何使用multidplyr和parallel连接、分组和汇总R中的大型数据帧

如何使用multidplyr和parallel连接、分组和汇总R中的大型数据帧,r,parallel-processing,left-join,multidplyr,R,Parallel Processing,Left Join,Multidplyr,这个问题与R中的其他大数据问题类似,但我找不到一个示例,说明如何合并/连接两个dfs,然后在两个dfs上执行计算,而不是读取大量数据帧并使用McLappy进行计算。这里的问题不是加载数据需要约20分钟,而是合并和汇总 我尝试了我能找到的所有data.table方法、不同类型的联接和ff,但仍然遇到vecseq限制2^31行的问题。现在我尝试使用multidplyr来并行执行,但无法找出错误的来源 数据帧: 具有约6500万行cols的物种_数据df第一次加载dplyr和multidplyr li

这个问题与R中的其他大数据问题类似,但我找不到一个示例,说明如何合并/连接两个dfs,然后在两个dfs上执行计算,而不是读取大量数据帧并使用McLappy进行计算。这里的问题不是加载数据需要约20分钟,而是合并和汇总

我尝试了我能找到的所有data.table方法、不同类型的联接和ff,但仍然遇到vecseq限制2^31行的问题。现在我尝试使用multidplyr来并行执行,但无法找出错误的来源

数据帧:
具有约6500万行cols的物种_数据df第一次加载dplyr和multidplyr

library(tidyverse)
install.packages("devtools")
library(devtools)
devtools::install_github("hadley/multidplyr") 
library(multidplyr)
library(parallel)

species_summary <- species_data %>%
  # partition the species data by species id
  partition(species_id, cluster = cluster) %>%
  left_join(species_data, lookup, by = "id") %>%
  dplyr::select(-id) %>%
  group_by(species_id) %>%
  ## total number of cells each species occurs in
  mutate(tot_count_cells = n_distinct(cell_id)) %>%
  ungroup() %>%
  dplyr::select(c(cell_id, species_id, rgn_id, tot_count_cells)) %>%
  group_by(rgn_id, species_id) %>% 
  ## number of cells each species occurs in each region
  summarise(count_cells_eez = n_distinct(cell_id)) %>% 
  collect() %>%
  as_tibble()
## Error in partition(., species_id, cluster = cluster) : unused argument (species_id)

## If I change to:
species_summary <- species_data %>%
  group_by(species_id) %>%
  partition(cluster = cluster) %>% ...
## get, "Error in worker_id(data, cluster) : object 'cluster' not found
图书馆弹琴 > >正在附加包:“dplyr” >以下对象已从“package:stats”屏蔽: > >滤波器,滞后 >以下对象已从“package:base”屏蔽: > >相交、setdiff、setequal、并集 图书馆多数据库 my_clusters 2 XDG-61673 234 >3 WFZ-94338 230 >4 UIH-97549 226 >5岁-35257229 >6 BMD-75361 249 >7 MJB-78799 226 >8 STS-15141225 >9 RXD-18645 245 >10 SKZ-58666 243 > ... 还有990行 查找 >一个tibble:500x3 >id单元格\u id rgn\u id > > 1 2001 1 649 > 2 2002 2 451 > 3 2003 3 532 > 4 2004 4 339 > 5 2005 5 062 > 6 2006 6 329 > 7 2007 7 953 > 8 2008 8 075 > 9 2009 9 008 > 10 2010 10 465 > ... 还有490行 现在我可以使用multidplyr方法运行代码了。我根据两个group_BY将dplyr代码分为两个步骤

第一步% 左joinlookup,by=id%>% 选择id%>% 按物种分组\u id%>% 分区我的\u群集%>% 突变t\u计数\u单元格=n\u差异单元格\u id%>% 收集%>% 解组 第一步 >一个tibble:1000x4 >物种\u id细胞\u id rgn\u id总数\u细胞 > >1 UIH-97549 NA 1 >2 BMD-75361 NA 1 >3 STS-15141 NA 1 >4 RXD-18645 NA 1 >5 HFI-78676 NA 1 >6 KVP-45194 NA 1 >7 SGW-29988 NA 1 >8 WBI-79521 NA 1 >9 MFY-86277 NA 1 >10 BHO-37621 NA 1 > ... 还有990行 及

第二步% 组号,种号%>% 分区我的\u群集%>% SummarseCount\u cells\u eez=n\u distinctcell\u id%>% 收集%>% 解组 第二步 >一个tibble:1000x3 >rgn\u id物种\u id计数\u细胞\u eez > >1 ABB-24645 1 >2 ABY-98559 1 >3 AEQ-42462 1 >4 AFO-58569 1 >5 AKQ-44439 1 >6 AMF-23978 1 >7 ANF-49159 1 >8 APD-85367 1 >9 AQH-64126 1 >10 AST-77513 1 > ... 还有990行
由v0.3.0于2020年3月21日创建,第一次加载dplyr和multidplyr

library(tidyverse)
install.packages("devtools")
library(devtools)
devtools::install_github("hadley/multidplyr") 
library(multidplyr)
library(parallel)

species_summary <- species_data %>%
  # partition the species data by species id
  partition(species_id, cluster = cluster) %>%
  left_join(species_data, lookup, by = "id") %>%
  dplyr::select(-id) %>%
  group_by(species_id) %>%
  ## total number of cells each species occurs in
  mutate(tot_count_cells = n_distinct(cell_id)) %>%
  ungroup() %>%
  dplyr::select(c(cell_id, species_id, rgn_id, tot_count_cells)) %>%
  group_by(rgn_id, species_id) %>% 
  ## number of cells each species occurs in each region
  summarise(count_cells_eez = n_distinct(cell_id)) %>% 
  collect() %>%
  as_tibble()
## Error in partition(., species_id, cluster = cluster) : unused argument (species_id)

## If I change to:
species_summary <- species_data %>%
  group_by(species_id) %>%
  partition(cluster = cluster) %>% ...
## get, "Error in worker_id(data, cluster) : object 'cluster' not found
图书馆弹琴 > >正在附加包:“dplyr” >以下对象已从“package:stats”屏蔽: > >滤波器,滞后 >以下对象已从“package:base”屏蔽: > >相交、setdiff、setequal、并集 图书馆多数据库 my_clusters 2 XDG-61673 234 >3 WFZ-94338 230 >4 UIH-97549 226 >5岁-35257229 >6 BMD-75361 249 >7 MJB-78799 226 >8 STS-15141225 >9 RXD-18645 245 >10 SKZ-58666 243 > ... 还有990行 查找 >一个tibble:500x3 >id单元格\u id rgn\u id > > 1 2001 1 649 > 2 2002 2 451 > 3 2003 3 532 > 4 2004 4 339 > 5 2005 5 062 > 6 2006 6 329 > 7 2007 7 953 > 8 2008 8 075 > 9 2009 9 008 > 10 2010 10 465 > ... 还有490行 现在我可以使用multidplyr方法运行代码了。我根据两个group_BY将dplyr代码分为两个步骤

第一步% 左joinlookup,by=id%>% 选择id%>% 按物种分组\u id%>% 分区我的\u群集%>% 突变t\u计数\u单元格=n\u差异单元格\u id%>% 收集%>% 解组 第一步 >一个tibble:1000x4 >物种\u id细胞\u id rgn\u id总数\u细胞 > >1 UIH-97549 NA 1 >2 BMD-75361 NA 1 >3 STS-15141 NA 1 >4 RXD-18645 NA 1 >5 HFI-78676 NA 1 >6 KVP-45194 NA 1 >7 SGW-29988 NA 1 >8 WBI-79521 NA 1 >9 MFY-86277 NA 1 >10 BHO-37621 NA 1 > ... 还有990行 及

第二步% G 组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别 分区我的\u群集%>% SummarseCount\u cells\u eez=n\u distinctcell\u id%>% 收集%>% 解组 第二步 >一个tibble:1000x3 >rgn\u id物种\u id计数\u细胞\u eez > >1 ABB-24645 1 >2 ABY-98559 1 >3 AEQ-42462 1 >4 AFO-58569 1 >5 AKQ-44439 1 >6 AMF-23978 1 >7 ANF-49159 1 >8 APD-85367 1 >9 AQH-64126 1 >10 AST-77513 1 > ... 还有990行

由v0.3.0于2020年3月21日创建,能否提供数据的一小部分或描述?了解您的问题会很有用。@agila用示例dataframesHi编辑了这个问题。我刚刚试着用示例数据帧运行您的示例,但问题是在运行过滤器之后!is.nargn_id我没有观察到,因为没有一个rgn_id不是NA。您可以更新示例数据框,或者共享原始数据框的一部分吗?@agila这里有一个更好的查找数据表示:lookup@leslieroberson好问题!您能提供数据的一小部分或描述吗?了解您的问题会很有用。@agila用示例dataframesHi编辑了这个问题。我刚刚试着用示例数据帧运行您的示例,但问题是在运行过滤器之后!is.nargn_id我没有观察到,因为没有一个rgn_id不是NA。您可以更新示例数据框,或者共享原始数据框的一部分吗?@agila这里有一个更好的查找数据表示:lookup@leslieroberson好问题!我认为这对样本数据帧非常有效,但在第一步,我仍然得到了错误,left_join_implx中的错误,y,by_x,by_y,aux_x,aux_y,na_匹配,环境:不允许负长度向量,我在谷歌上搜索了一下,意思是合并结果在>2^31行如果你不能共享原始数据帧,那么我想我只能做这个例子了,对不起。顺便说一句:你检查过了吗?我很乐意共享它们,如果你想尝试一下,这里有一个dropbox链接:。我想它们太大了。对不起,我解决不了这个问题。也许你可以问一个新问题,报告data.table错误并寻求帮助。我认为这对示例数据帧非常有效,但在第一步我仍然得到错误,left_join_implx中的错误,y,by_x,by_y,aux_x,aux_y,na_匹配,环境:不允许使用负长度向量,我在谷歌上搜索了一下,意思是合并结果在>2^31行如果你不能共享原始数据帧,那么我想我只能做这个例子了,对不起。顺便说一句:你检查过了吗?我很乐意共享它们,如果你想尝试一下,这里有一个dropbox链接:。我想它们太大了。对不起,我解决不了这个问题。也许你可以问一个新问题,报告data.table错误并寻求帮助。