[ 
https://issues.apache.org/jira/browse/ARROW-16641?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17542142#comment-17542142
 ] 

Will Jones commented on ARROW-16641:
------------------------------------

Yes that option doesn't seem to do anything here. I think the semantics are a 
little tough to design for that. {{list_parent_indices}} returns a value per 
value in the subarray; if there are zero values, should there not be zero 
indices?

It does make this set filtering more awkward though; this probably deserves 
it's own function.

A different approach might be constructing the indices to exclude:

{code:R}
library(arrow)
library(dplyr)

# Filter `tab` for any `tab$x` in that doesn't contain value in `exclude`
exclude <- Array$create(c(1))

tab <- arrow_table(
  x = Array$create(list(c(1, 2), c(3, 2), c(), c(1, 3))),
  y = Array$create(c("a", "b", "c", "d"))
)

tab_exploded <- arrow_table(
  i = call_function("list_parent_indices", tab$x),
  x_flat = call_function("list_flatten", tab$x)
  #x_flat = tab$x$chunk(0)$values()
)

to_drop <- tab_exploded %>%
  group_by(i) %>%
  summarise(to_drop = any((x_flat %in% exclude))) %>%
  filter(to_drop) %>%
  compute() %>%
  .$i

selection <- !(1:nrow(tab) %in% as.vector(to_drop + 1))
res <- tab[selection,]
as_tibble(res)
#> # A tibble: 2 × 2
#>                x y    
#>   <list<double>> <chr>
#> 1            [2] b    
#> 2                c
res$x
#> ChunkedArray
#> [
#>   [
#>     [
#>       3,
#>       2
#>     ],
#>     null
#>   ]
#> ]
{code}



> [R] How to filter array columns?
> --------------------------------
>
>                 Key: ARROW-16641
>                 URL: https://issues.apache.org/jira/browse/ARROW-16641
>             Project: Apache Arrow
>          Issue Type: Wish
>          Components: R
>            Reporter: Vladimir
>            Priority: Minor
>             Fix For: 8.0.0
>
>
> In the parquet data we have, there is a column with the array data type 
> ({*}list<array_element <string>>{*}), which flags records that have different 
> issues. For each record, multiple values could be stored in the column. For 
> example, `{_}[A, B, C]{_}`.
> I'm trying to perform a data filtering step and exclude some flagged records.
> Filtering is trivial for the regular columns that contain just a single 
> value. E.g.,
> {code:java}
> flags_to_exclude <- c("A", "B")
> datt %>% filter(! col %in% flags_to_exclude)
> {code}
> Given the array column, is it possible to exclude records with at least one 
> of the flags from `flags_to_exclude` using the arrow R package?
> I really appreciate any advice you can provide!



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

Reply via email to