You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@arrow.apache.org by "Weston Pace (Jira)" <ji...@apache.org> on 2022/07/07 15:39:00 UTC
[jira] [Assigned] (ARROW-16807) [C++] count_distinct aggregates incorrectly across row groups
[ https://issues.apache.org/jira/browse/ARROW-16807?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Weston Pace reassigned ARROW-16807:
-----------------------------------
Assignee: (was: Aldrin M)
> [C++] count_distinct aggregates incorrectly across row groups
> -------------------------------------------------------------
>
> Key: ARROW-16807
> URL: https://issues.apache.org/jira/browse/ARROW-16807
> Project: Apache Arrow
> Issue Type: Bug
> Components: C++
> Environment: > arrow::arrow_info()
> Arrow package version: 8.0.0.9000
> Capabilities:
>
> dataset TRUE
> substrait FALSE
> parquet TRUE
> json TRUE
> s3 TRUE
> utf8proc TRUE
> re2 TRUE
> snappy TRUE
> gzip TRUE
> brotli TRUE
> zstd TRUE
> lz4 TRUE
> lz4_frame TRUE
> lzo FALSE
> bz2 TRUE
> jemalloc TRUE
> mimalloc FALSE
> Memory:
>
> Allocator jemalloc
> Current 37.25 Kb
> Max 925.42 Kb
> Runtime:
>
> SIMD Level none
> Detected SIMD Level none
> Build:
>
> C++ Library Version 9.0.0-SNAPSHOT
> C++ Compiler AppleClang
> C++ Compiler Version 13.1.6.13160021
> Git ID d9d78946607f36e25e9d812a5cc956bd00ab2bc9
> Reporter: Edward Visel
> Priority: Blocker
> Fix For: 9.0.0, 8.0.1
>
>
> When reading from parquet files with multiple row groups, {{count_distinct}} (wrapped by {{n_distinct}} in R) returns inaccurate and inconsistent results:
> {code:r}
> library(dplyr, warn.conflicts = FALSE)
> path <- tempfile(fileext = '.parquet')
> arrow::write_parquet(dplyr::starwars, path, chunk_size = 20L)
> ds <- arrow::open_dataset(path)
> ds %>% count(sex) %>% collect()
> #> # A tibble: 5 × 2
> #> sex n
> #> <chr> <int>
> #> 1 male 60
> #> 2 none 6
> #> 3 female 16
> #> 4 hermaphroditic 1
> #> 5 <NA> 4
> ds %>% summarise(n = n_distinct(sex)) %>% collect()
> #> # A tibble: 1 × 1
> #> n
> #> <int>
> #> 1 19
> ds %>% summarise(n = n_distinct(sex)) %>% collect()
> #> # A tibble: 1 × 1
> #> n
> #> <int>
> #> 1 17
> ds %>% summarise(n = n_distinct(sex)) %>% collect()
> #> # A tibble: 1 × 1
> #> n
> #> <int>
> #> 1 17
> ds %>% summarise(n = n_distinct(sex)) %>% collect()
> #> # A tibble: 1 × 1
> #> n
> #> <int>
> #> 1 16
> ds %>% summarise(n = n_distinct(sex)) %>% collect()
> #> # A tibble: 1 × 1
> #> n
> #> <int>
> #> 1 16
> ds %>% summarise(n = n_distinct(sex)) %>% collect()
> #> # A tibble: 1 × 1
> #> n
> #> <int>
> #> 1 17
> ds %>% summarise(n = n_distinct(sex)) %>% collect()
> #> # A tibble: 1 × 1
> #> n
> #> <int>
> #> 1 17
> # correct
> ds %>% collect() %>% summarise(n = n_distinct(sex))
> #> # A tibble: 1 × 1
> #> n
> #> <int>
> #> 1 5
> {code}
> If the file is stored as a single row group, results are correct. When grouped, results are correct.
> I can reproduce this in Python as well using the same file and {{pyarrow.compute.count_distinct}}:
> {code:python}
> import pyarrow as pa
> import pyarrow.parquet as pq
> pa.__version__
> #> 8.0.0
> starwars = pq.read_table('/var/folders/0j/zz6p_mjx2_b727p6xdpm5chc0000gn/T//Rtmp2wnWl5/file1744f6cc6cea8.parquet')
> pa.compute.count_distinct(starwars.column('sex')).as_py()
> #> 15
> pa.compute.unique(starwars.column('sex'))
> #> [
> #> "male",
> #> "none",
> #> "female",
> #> "hermaphroditic",
> #> null
> #> ]
> {code}
> This seems likely to be the same problem in this StackOverflow question: https://stackoverflow.com/questions/72561901/how-do-i-compute-the-number-of-unique-values-in-a-pyarrow-array which is working from orc files.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)