Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[C++][R] summarizing a variable results in NA at random, while there is no NA in the subset of data. #36053

Closed
leoniedu opened this issue Jun 13, 2023 · 3 comments · Fixed by #36368
Assignees
Labels
Component: C++ Component: R Critical Fix Bugfixes for security vulnerabilities, crashes, or invalid data. Priority: Critical Type: bug
Milestone

Comments

@leoniedu
Copy link

Describe the bug, including details regarding any error messages, version, and platform.

td <- tempdir()
tzip <- file.path(td, "reprex.zip")
download.file("https://drive.google.com/uc?export=download&id=1-KefpiALDtUg0PrCUgpMAaE0903jVWWm", destfile = tzip)
unzip(tzip, exdir = td)
tlink <- file.path(td, "co_ano_mes=1997-01-01")
library(dplyr)
arrow_dset <- arrow::open_dataset(
     tlink,
     format = "parquet"
)
arrow_dset%>%
count(fluxo, vl_frete_miss=is.na(vl_frete))%>%collect()

No missing values for vl_frete when fluxo=="imp"

fluxo vl_frete_miss n

exp TRUE 35546
imp FALSE 42332

replicate(10,  arrow_dset%>% 
  group_by(fluxo) %>% 
  summarise(vl_frete=sum(vl_frete)) %>% 
  collect %>% 
  filter(fluxo=="imp") %>%
  pull(vl_frete))
 [1]        NA        NA 154149785        NA 154149785        NA 154149785 154149785
 [9] 154149785 154149785

Component(s)

R

@paleolimbot
Copy link
Member

Thank you for reporting! I can replicate this on MacOS M1 (although I needed a lot more than 10 tries to reliably replicate the last bit):

library(arrow, warn.conflicts = FALSE)
library(dplyr, warn.conflicts = FALSE)

td <- tempfile()
dir.create(td)
tzip <- file.path(td, "reprex.zip")
download.file("https://drive.google.com/uc?export=download&id=1-KefpiALDtUg0PrCUgpMAaE0903jVWWm", destfile = tzip)
unzip(tzip, exdir = td)
tlink <- file.path(td, "co_ano_mes=1997-01-01")

arrow_dset <- arrow::open_dataset(
  tlink,
  format = "parquet"
)

arrow_dset %>%
  count(fluxo, vl_frete_miss = is.na(vl_frete)) %>%
  collect()
#> # A tibble: 2 × 3
#>   fluxo vl_frete_miss     n
#>   <chr> <lgl>         <int>
#> 1 exp   TRUE          35546
#> 2 imp   FALSE         42332

replicate(
  1000,  
  arrow_dset %>% 
    group_by(fluxo) %>% 
    summarise(vl_frete = sum(vl_frete)) %>% 
    collect %>% 
    filter(fluxo=="imp") %>%
    pull(vl_frete)
)
#>    [1]        NA        NA        NA        NA        NA        NA        NA
#>    [8]        NA        NA        NA        NA        NA        NA 154149785
#>   [15]        NA        NA        NA        NA        NA        NA        NA
#>   [22]        NA        NA        NA        NA        NA        NA        NA
#>   [29]        NA        NA        NA        NA        NA        NA        NA
#>   [36]        NA        NA        NA        NA        NA        NA        NA
#>   [43]        NA        NA        NA        NA        NA        NA        NA
#>   [50]        NA        NA        NA        NA        NA        NA        NA
#>   [57]        NA        NA        NA        NA        NA        NA        NA
#>   [64]        NA        NA 154149785        NA        NA        NA        NA
#>   [71]        NA        NA        NA        NA        NA        NA        NA
#>   [78]        NA        NA        NA        NA        NA        NA        NA
#>   [85]        NA        NA        NA        NA        NA        NA        NA
#>   [92]        NA        NA        NA        NA        NA        NA        NA
#>   [99]        NA        NA        NA        NA        NA        NA        NA
#>  [106]        NA        NA        NA        NA        NA        NA        NA
#>  [113]        NA        NA        NA        NA        NA        NA        NA
#>  [120]        NA        NA        NA        NA        NA        NA        NA
#>  [127]        NA        NA        NA        NA        NA        NA        NA
#>  [134]        NA        NA        NA        NA        NA        NA        NA
#>  [141]        NA        NA        NA        NA        NA        NA        NA
#>  [148]        NA        NA        NA        NA        NA        NA        NA
#>  [155]        NA        NA        NA        NA        NA        NA        NA
#>  [162]        NA        NA        NA        NA        NA        NA        NA
#>  [169]        NA        NA        NA        NA        NA        NA        NA
#>  [176]        NA        NA        NA        NA        NA        NA        NA
#>  [183]        NA        NA        NA        NA        NA        NA        NA
#>  [190]        NA        NA        NA        NA        NA        NA        NA
#>  [197]        NA        NA        NA        NA        NA        NA        NA
#>  [204]        NA        NA        NA        NA        NA        NA        NA
#>  [211]        NA        NA        NA        NA        NA        NA        NA
#>  [218]        NA        NA        NA        NA        NA        NA        NA
#>  [225]        NA        NA        NA        NA        NA        NA        NA
#>  [232]        NA        NA        NA        NA        NA        NA        NA
#>  [239]        NA        NA 154149785 154149785        NA        NA        NA
#>  [246]        NA        NA        NA        NA        NA        NA        NA
#>  [253]        NA        NA        NA        NA        NA        NA        NA
#>  [260]        NA        NA        NA        NA        NA        NA        NA
#>  [267]        NA        NA        NA        NA        NA 154149785        NA
#>  [274]        NA        NA        NA        NA        NA        NA        NA
#>  [281]        NA        NA        NA        NA        NA        NA        NA
#>  [288]        NA        NA        NA        NA        NA        NA        NA
#>  [295]        NA        NA        NA        NA        NA        NA        NA
#>  [302]        NA        NA        NA        NA        NA        NA        NA
#>  [309]        NA        NA        NA        NA        NA        NA        NA
#>  [316]        NA        NA        NA        NA        NA        NA        NA
#>  [323]        NA        NA        NA        NA        NA        NA        NA
#>  [330]        NA        NA        NA        NA        NA        NA        NA
#>  [337]        NA        NA        NA        NA        NA        NA        NA
#>  [344]        NA        NA        NA        NA        NA        NA        NA
#>  [351]        NA        NA        NA        NA        NA        NA        NA
#>  [358]        NA        NA        NA        NA        NA        NA        NA
#>  [365]        NA        NA        NA        NA        NA        NA        NA
#>  [372]        NA        NA        NA        NA        NA        NA        NA
#>  [379]        NA        NA        NA        NA        NA        NA        NA
#>  [386]        NA        NA        NA        NA        NA        NA        NA
#>  [393]        NA        NA        NA        NA        NA        NA        NA
#>  [400]        NA        NA        NA        NA        NA        NA        NA
#>  [407]        NA        NA        NA        NA        NA        NA        NA
#>  [414]        NA        NA        NA        NA        NA        NA        NA
#>  [421]        NA        NA        NA        NA        NA        NA        NA
#>  [428]        NA        NA        NA        NA        NA        NA        NA
#>  [435]        NA        NA        NA        NA        NA        NA        NA
#>  [442]        NA        NA        NA        NA        NA        NA        NA
#>  [449]        NA        NA        NA        NA        NA        NA        NA
#>  [456]        NA        NA        NA        NA        NA        NA        NA
#>  [463]        NA        NA        NA        NA        NA        NA        NA
#>  [470]        NA        NA        NA        NA        NA        NA        NA
#>  [477]        NA        NA        NA        NA        NA        NA        NA
#>  [484]        NA        NA        NA        NA        NA        NA        NA
#>  [491]        NA        NA        NA        NA        NA        NA        NA
#>  [498]        NA        NA        NA        NA        NA        NA        NA
#>  [505]        NA        NA        NA 154149785        NA        NA        NA
#>  [512]        NA        NA        NA        NA        NA        NA        NA
#>  [519]        NA        NA        NA        NA        NA        NA        NA
#>  [526]        NA        NA        NA        NA        NA        NA        NA
#>  [533]        NA        NA        NA        NA        NA        NA        NA
#>  [540]        NA        NA        NA        NA        NA        NA        NA
#>  [547]        NA        NA        NA        NA        NA        NA        NA
#>  [554]        NA        NA        NA        NA        NA        NA        NA
#>  [561]        NA        NA        NA        NA        NA        NA        NA
#>  [568]        NA        NA        NA        NA        NA        NA        NA
#>  [575]        NA        NA        NA        NA        NA        NA        NA
#>  [582]        NA        NA        NA        NA        NA        NA        NA
#>  [589]        NA        NA        NA        NA        NA        NA        NA
#>  [596]        NA        NA        NA        NA        NA        NA        NA
#>  [603]        NA        NA        NA        NA        NA        NA        NA
#>  [610]        NA        NA        NA        NA        NA        NA        NA
#>  [617]        NA        NA        NA        NA        NA        NA        NA
#>  [624]        NA        NA        NA        NA        NA        NA        NA
#>  [631]        NA        NA        NA        NA        NA        NA        NA
#>  [638]        NA        NA        NA        NA        NA        NA        NA
#>  [645]        NA        NA        NA        NA        NA        NA        NA
#>  [652]        NA        NA        NA        NA        NA        NA        NA
#>  [659]        NA        NA        NA        NA        NA        NA        NA
#>  [666]        NA        NA        NA        NA        NA        NA        NA
#>  [673]        NA        NA        NA        NA        NA        NA        NA
#>  [680]        NA        NA        NA        NA        NA        NA        NA
#>  [687]        NA        NA        NA        NA        NA        NA        NA
#>  [694]        NA        NA        NA        NA        NA        NA        NA
#>  [701]        NA        NA        NA        NA        NA        NA        NA
#>  [708]        NA        NA        NA        NA        NA        NA        NA
#>  [715]        NA        NA        NA        NA        NA        NA        NA
#>  [722] 154149785        NA        NA        NA        NA        NA        NA
#>  [729]        NA        NA        NA        NA        NA        NA        NA
#>  [736]        NA        NA        NA        NA        NA        NA        NA
#>  [743]        NA        NA        NA        NA        NA        NA        NA
#>  [750]        NA        NA        NA        NA        NA        NA        NA
#>  [757]        NA        NA        NA        NA        NA        NA        NA
#>  [764]        NA        NA        NA        NA        NA        NA        NA
#>  [771]        NA        NA        NA        NA        NA        NA        NA
#>  [778]        NA        NA        NA        NA        NA        NA        NA
#>  [785]        NA        NA        NA        NA        NA        NA        NA
#>  [792]        NA        NA        NA        NA        NA        NA        NA
#>  [799]        NA        NA        NA        NA        NA        NA        NA
#>  [806]        NA        NA        NA        NA        NA        NA        NA
#>  [813]        NA        NA        NA        NA        NA        NA        NA
#>  [820]        NA        NA        NA        NA        NA        NA        NA
#>  [827]        NA        NA        NA        NA        NA        NA        NA
#>  [834]        NA        NA        NA        NA        NA        NA        NA
#>  [841]        NA        NA        NA        NA        NA        NA        NA
#>  [848]        NA        NA        NA        NA        NA        NA        NA
#>  [855]        NA        NA        NA        NA        NA        NA        NA
#>  [862]        NA        NA        NA        NA        NA        NA        NA
#>  [869]        NA        NA        NA        NA        NA        NA        NA
#>  [876]        NA        NA        NA        NA        NA        NA        NA
#>  [883]        NA        NA        NA        NA        NA        NA        NA
#>  [890]        NA        NA        NA        NA        NA        NA        NA
#>  [897]        NA        NA        NA        NA        NA        NA        NA
#>  [904]        NA        NA        NA        NA        NA        NA        NA
#>  [911]        NA        NA        NA        NA        NA        NA        NA
#>  [918]        NA        NA        NA        NA        NA        NA        NA
#>  [925]        NA        NA        NA        NA        NA        NA        NA
#>  [932]        NA        NA        NA        NA        NA        NA        NA
#>  [939]        NA        NA        NA        NA        NA        NA        NA
#>  [946]        NA        NA        NA        NA        NA        NA        NA
#>  [953]        NA        NA        NA        NA        NA        NA 154149785
#>  [960]        NA        NA        NA        NA        NA        NA        NA
#>  [967]        NA        NA        NA        NA        NA        NA        NA
#>  [974]        NA        NA        NA        NA        NA        NA        NA
#>  [981]        NA        NA        NA        NA        NA        NA        NA
#>  [988]        NA        NA        NA        NA        NA        NA        NA
#>  [995]        NA        NA        NA        NA        NA        NA

Created on 2023-06-19 with reprex v2.0.2

@westonpace
Copy link
Member

Thanks both for the report, reproduction, and analysis. This is a good find and an important bug to fix!

@thisisnic thisisnic changed the title R and dplyr, summarizing a variable results in NA at random, while there is no NA in the subset of data. [R] R and dplyr, summarizing a variable results in NA at random, while there is no NA in the subset of data. Jun 29, 2023
@thisisnic thisisnic changed the title [R] R and dplyr, summarizing a variable results in NA at random, while there is no NA in the subset of data. [C++] R and dplyr, summarizing a variable results in NA at random, while there is no NA in the subset of data. Jun 29, 2023
@thisisnic thisisnic changed the title [C++] R and dplyr, summarizing a variable results in NA at random, while there is no NA in the subset of data. [C++][R] summarizing a variable results in NA at random, while there is no NA in the subset of data. Jun 29, 2023
bkietz pushed a commit that referenced this issue Jun 29, 2023
… there is no NA in the subset of data (#36368)

### Rationale for this change

When merging two aggregate states we were failing to use the correct `no_nulls` field.  This field tells us whether we should return `null` if `skip_nulls=False` (if `no_nulls` is false then we return null).

Since we were reading the wrong field we would sometimes emit null even when a column didn't actually have any nulls.

### What changes are included in this PR?

Fixed the bug.

### Are these changes tested?

Yes, I added a new unit test that reproduced this failure quite reliably.

### Are there any user-facing changes?

No.
* Closes: #36053

Authored-by: Weston Pace <weston.pace@gmail.com>
Signed-off-by: Benjamin Kietzman <bengilgit@gmail.com>
@bkietz bkietz added this to the 13.0.0 milestone Jun 29, 2023
@leoniedu
Copy link
Author

Thanks @westonpace ! And now I know the warm fuzzy feeling of reporting an important bug or an important open source software and having it promptly addressed! Thanks to you and everyone on the team for the incredible work.

@raulcd raulcd added the Critical Fix Bugfixes for security vulnerabilities, crashes, or invalid data. label Sep 12, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Component: C++ Component: R Critical Fix Bugfixes for security vulnerabilities, crashes, or invalid data. Priority: Critical Type: bug
Projects
None yet
6 participants