Этот вопрос аналогичен другим проблемам с очень большими данными в R, но я не могу найти пример того, как объединить / объединить, а затем выполнить вычисления на двух dfs (в отличие от чтения во многих фреймах данных и использования mclapply). сделать расчеты). Здесь проблема не в загрузке данных (занимает ~ 20 минут, но они загружаются), а в объединении и суммировании.
Я перепробовал все подходы data.table, которые я смог найти, различные типы объединений и ff, и я все еще сталкиваюсь с проблемой ограничения vecseq 2 ^ 31 строк. Теперь я пытаюсь использовать multidplyr для параллельного выполнения, но не могу понять, откуда возникла ошибка.
Фреймы данных: kind_data # df с ~ 65 миллионами строк с столбцами <- c ("id", "видов_идентификатора") lookup # df с ~ 17 миллионами строк с столбцами <- c ("id", "cell_id", "rgn_id") Не все идентификаторы в поиске отображаются в kind_data </p>
## make sample dataframes:
lookup <- data.frame(id = seq(2001,2500, by = 1),
cell_id = seq(1,500, by = 1),
rgn_id = seq(801,1300, by = 1))
library(stringi)
species_id <- sprintf("%s%s%s", stri_rand_strings(n = 1000, length = 3, pattern = "[A-Z]"),
pattern = "-",
stri_rand_strings(1000, length = 5, '[1-9]'))
id <- sprintf("%s%s%s", stri_rand_strings(n = 1000, length = 1, pattern = "[2]"),
stri_rand_strings(n = 1000, length = 1, pattern = "[0-4]"),
stri_rand_strings(n = 1000, length = 1, pattern = "[0-9]"))
species_data <- data.frame(species_id, id)
объединение и объединение dfs с 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
Это моя первая попытка параллельных и больших данных, и я изо всех сил пытаюсь диагностировать ошибки.
Спасибо!