n_distinct 是磁盘帧的精确计算吗?
Is n_distinct an exact calculation with disk frames?
我正在 运行 n_distinct 处理一个大文件 (>30GB),它似乎没有产生准确的结果。
我有另一个数据参考点,磁盘帧聚合中的输出已关闭。
它在文档中提到 n_distinct 是精确计算,而不是估计。
对吗?
可以在此页面上找到 n_distinct
的实现 https://github.com/xiaodaigh/disk.frame/blob/master/R/one-stage-verbs.R
#' @export
#' @rdname one-stage-group-by-verbs
n_distinct_df.chunk_agg.disk.frame <- function(x, na.rm = FALSE, ...) {
if(na.rm) {
setdiff(unique(x), NA)
} else {
unique(x)
}
}
#' @export
#' @importFrom dplyr n_distinct
#' @rdname one-stage-group-by-verbs
n_distinct_df.collected_agg.disk.frame <- function(listx, ...) {
n_distinct(unlist(listx))
}
现在,它看起来是我想要的精确计算。逻辑很简单,它计算每个块中的 unique
,然后 n_distinct
收集所有块的结果。
但不排除其他地方有bug
你有测试用例来证明它不完全是吗?或许你可以贡献一个 PR 来测试一下?
我正在 运行 n_distinct 处理一个大文件 (>30GB),它似乎没有产生准确的结果。
我有另一个数据参考点,磁盘帧聚合中的输出已关闭。
它在文档中提到 n_distinct 是精确计算,而不是估计。
对吗?
可以在此页面上找到 n_distinct
的实现 https://github.com/xiaodaigh/disk.frame/blob/master/R/one-stage-verbs.R
#' @export
#' @rdname one-stage-group-by-verbs
n_distinct_df.chunk_agg.disk.frame <- function(x, na.rm = FALSE, ...) {
if(na.rm) {
setdiff(unique(x), NA)
} else {
unique(x)
}
}
#' @export
#' @importFrom dplyr n_distinct
#' @rdname one-stage-group-by-verbs
n_distinct_df.collected_agg.disk.frame <- function(listx, ...) {
n_distinct(unlist(listx))
}
现在,它看起来是我想要的精确计算。逻辑很简单,它计算每个块中的 unique
,然后 n_distinct
收集所有块的结果。
但不排除其他地方有bug
你有测试用例来证明它不完全是吗?或许你可以贡献一个 PR 来测试一下?