Как я могу получить размер, который цель-селезень принимает на диск?
Когда нужно понять мой план Дрейка, vis_drake_graph()
пригодится, и он отображает время, которое потребовалось каждой цели для запуска. Это очень помогает выяснить, следует ли разбивать цели, чтобы сократить время повторного запуска при небольших изменениях.
Моя потребность связана с этим: поскольку многие из моих долгосрочных целей связаны с манипулированием большими наборами данных, для меня важно понять размер, который каждая кэшируемая цель занимает на диске. Это помогло бы мне понять, следует ли объединять цели, чтобы предотвратить хранение огромных промежуточных результатов (даже если это увеличит время повторного запуска в случае изменения объединенной цели).
Изучение как объекта конфигурации, так и промежуточного объекта, возвращаемого drake_graph_info()
Я не смог найти эту информацию. Я думал, что было бы очень полезно иметь эту информацию и потенциально другую информацию (например, время последнего запуска цели), указав параметры для vis_drake_graph()
или даже просто проверяя объект конфигурации вручную.
Итак, вопрос в том, есть ли способ получить эту информацию?
2 ответа
drake
использует пакет под названием storr
обрабатывать хранение целей. Насколько я знаю, storr
не имеет простого способа получить информацию о размере файла. Тем не менее, по крайней мере, по умолчанию storr_rds()
Тип кеша, может, так и должно Вы можете запросить его как функцию. В случае реализации у нас будет более простая версия следующего обходного пути, по крайней мере, в случае кэшей RDS.
library(drake)
load_mtcars_example()
make(my_plan, verbose = 0L)
cache <- get_cache() # or storr::storr_rds(".drake")
root <- cache$driver$path
hash <- cache$driver$get_hash("small", namespace = "objects")
path <- file.path(root, "data", paste0(hash, ".rds"))
file.exists(path)
#> [1] TRUE
file.size(path)
#> [1] 404
Создано 2019-05-07 пакетом представлением (v0.2.1)
drake
все о повторении и времени выполнения, и storr
это все о данных и хранении. Размышляя о новых возможностях, я бы предпочел помнить об этих отдельных целях.
Спасибо за ответ @landau, используя эту информацию, я реализовал функцию, которая сообщает о размере цели, позволяя быстро проверить размеры всех целей в плане:
library(tibble)
library(drake)
get_target_size <- function(target) {
cache <- get_cache() # or storr::storr_rds(".drake")
root <- cache$driver$path
hash <- cache$driver$get_hash(target, namespace = "objects")
path <- file.path(root, "data", paste0(hash, ".rds"))
if ( file.exists(path) ) {
file.size(path)
} else {
NA
}
}
load_mtcars_example()
make(my_plan, verbose = 0L)
tibble( target = my_plan$target,
size = sapply(my_plan$target, get_target_size))
Выход:
# A tibble: 15 x 2
target size
<chr> <dbl>
1 report 55
2 small 404
3 large 463
4 regression1_small 2241
...
Я думаю, что этого будет достаточно для моих нужд, и понимаю, что, возможно, не имеет смысла реализовывать его как часть Drake, если не было более общего решения, которое работало бы для любого типа хранилища.