Как подсчитать уникальные объекты с disk.frame в R?

Я хочу преобразовать фрейм данных в фрейм диска, а затем посчитать первый столбец. Когда я пробую, он не считает количество уникальных значений столбца. Кажется, подсчитывает количество рабочих.

library(disk.frame)
options(future.globals.maxSize = Inf)
setup_disk.frame(workers = 8)

Это пример набора данных

    bigint <- sample(123901239804:901283455390, 3*10^5)
    df <- data.frame(bigint)
    df %>% 
      summarize(ints = length(unique(bigint)))
    
    df %>% 
      as.disk.frame %>%
      summarize(ints = length(bigint)) %>% 
      collect

В первом запросе он получает этот вывод

    ints
1 300000

Во втором запросе он получает этот вывод

    ints
1      8

1 ответ

Решение

{disk.frame} поддерживает только некоторые функции группировки. Вы можете использовать dplyr::n_distinct

df %>% 
  as.disk.frame %>%
  summarize(ints = n_distinct(bigint)) %>% 
  collect

который дает

    ints
1 300000

См. Список поддерживаемых групповых глаголов здесь https://diskframe.com/articles/10-group-by.html#list-of-supported-group-by-functions

Вы можете определить более индивидуальные групповые глаголы, следуя этому руководству

https://diskframe.com/articles/11-custom-group-by.html

Определенные глаголы группировки по не могут быть выполнены точным образом из-за разбиения на части disk.frame. Но это верно для всех систем "больших" данных.

Другие вопросы по тегам