arrow_extendr
arrow-extendr is a crate that facilitates the transfer of Apache Arrow memory between R and Rust. It utilizes extendr, the {nanoarrow} R package, and arrow-rs.
Versioning
At present, versions of arrow-rs are not compatible with each other. This means if your crate uses arrow-rs version 48.0.1, then the arrow-extendr must also use that same version. As such, arrow-extendr uses the same versions as arrow-rs so that it is easy to match the required versions you need.
Versions:
- 48.0.1
- 49.0.0
- 49.0.0-geoarrow (not available on crates.io but is the current Git version)
Motivating Example
Say we have the following DBI connection which we will send requests to using arrow.
The result of dbGetQueryArrow() is a nanoarrow_array_stream. We want to
count the number of rows in each batch of the steam using Rust.
# adapted from https://github.com/r-dbi/DBI/blob/main/vignettes/DBI-arrow.Rmd
con <-
data <-
We can write an extendr function which creates an ArrowArrayStreamReader
from an &Robj. In the function we instantiate a counter to keep track
of the number of rows per chunk. For each chunk we print the number of rows.
/// @export
With this function we can use it on the output of dbGetQueryArrow() or other Arrow
related DBI functions.
query <-
#> Processing `ArrowArrayStreamReader`...
#> Found 256 rows
#> Found 256 rows
#> Found 256 rows
#> ... truncated ...
#> Found 256 rows
#> Found 256 rows
#> Found 143 rows
#> [1] 2959