如何获得Drake目标在磁盘上占用的大小?

时间:2019-05-07 11:50:06

标签: r drake-r-package

当需要了解我的德雷克计划时,vis_drake_graph()会派上用场,它会显示每个目标运行所需的时间。这对于确定是否应该分解目标以减少较小更改的重新运行时间非常有帮助。

我的需求与之相关:由于我的许多长期运行的目标都涉及对大型数据集的操纵,因此,了解每个缓存目标在磁盘上所占的大小对我来说很重要。这可以帮助我理解是否应该合并目标以防止存储大量中间结果(即使在更改合并目标的情况下也会增加重新运行时间)。

检查drake_graph_info()返回的配置对象和中间对象,我找不到此信息。我当时想知道此信息以及可能通过指定vis_drake_graph()的参数甚至仅通过手动检查config对象显示的其他信息(例如,上次运行目标的时间)可能非常有用。 / p>

问题是,有没有办法获取这些信息?

2 个答案:

答案 0 :(得分:1)

drake使用称为storr的程序包来处理目标的存储。据我所知,storr并不容易获得文件大小信息。但是,至少对于默认的storr_rds()缓存类型,也许应该这样。您可以request it as a feature。如果实施,至少在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

reprex package(v0.2.1)于2019-05-07创建

drake全部涉及重复和运行时,storr全部涉及数据和存储。当我们考虑新功能时,我希望牢记这些单独的目标。

答案 1 :(得分:1)

感谢@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的一部分实施可能没有任何意义。