Hi Neal,

Thanks for your reply. I've attached below how I installed the arrow R package on my system - first downloading and installing the C/C++ code, then installing the R package contained in this [arrow.git] download.

 refs/points:
1) https://github.com/apache/arrow/tree/master/r
2) https://arrow.apache.org/docs/developers/cpp/building.html
3) requires R version 3.6 or higher.

[1]:
git clone https://github.com/apache/arrow.git
cd arrow/cpp
mkdir release
cd release

[2]:
sudo cmake ../ -DARROW_COMPUTE=ON -DARROW_CSV=ON -DARROW_DATASET=ON -DARROW_FILESYSTEM=ON -DARROW_JEMALLOC=ON -DARROW_JSON=ON -DARROW_PARQUET=ON -DARROW_BUILD_TYPE=release -DARROW_WITH_BROTLI=ON -DARROW_WITH_BZ2=ON -DARROW_WITH_LZ4=ON -DARROW_WITH_ZLIB=ON -DARROW_WITH_ZSTD=ON -DARROW_EXTRA_ERROR_CONTEXT=ON -DARROW_PLASMA=ON

[3]:
sudo make install

[4]:
#then run this to pick-up the new libs in /usr/local/lib
sudo ldconfig

[5]:
# and make sure LD_LIBRARY_PATH and R_LD_LIBRARY_PATH contains /usr/local/lib
echo $LD_LIBRARY_PATH
echo $R_LD_LIBRARY_PATH

[6]:
#then try installing the R arrow package
cd ../../r
R -e 'install.packages(c("devtools", "roxygen2", "pkgdown", "covr")); devtools::install_dev_deps()'
R CMD INSTALL .

#------------------------

I believe the code I wrote works... in the sense that the value/address of the pointer passed is printed to screen - I also tested this by modifying the code to include the libraries suggested in your last email:

 ## compile c++ code
Sys.setenv("PKG_CXXFLAGS" = "-larrow_bundled_dependencies -larrow_dataset -lparquet -larrow")


 Running the R code, 'arrowTest.R', then generates:

 > source('arrowTest.R')

Attaching package: ‘arrow’

The following object is masked from ‘package:utils’:

    timestamp

in test
0x5652319be670



I guess my question was is what I'm doing correct? By this I mean from the code i have written, is (or how is) it possible to print the values of the arrow::Array, called 'aAPtr', that i've passed to function 'test' - and similarity write values to aAptr?

Thanks for your time to read my email, and for your reply.

All the Best,
Colin Mclean.


Quoting Neal Richardson <neal.p.richard...@gmail.com> on Mon, 12 Oct 2020 08:09:44 -0700:

Hi Colin,
Does the code you shared run? If not, how does it fail?

One guess is that you're probably getting undefined symbols errors because
you need more than just -larrow. See
https://github.com/apache/arrow/blob/master/r/configure#L35 for others you
need, and depending on how you installed arrow, you likely also need
-larrow_bundled_dependencies.

Neal

On Mon, Oct 12, 2020 at 1:49 AM Colin McLean <cmcle...@staffmail.ed.ac.uk>
wrote:

Dear Arrow users,

  I was wondering if anyone can help me understand how I can create an
arrow::Array object in R, then pass this into C++ (using the Rcpp
library) for both reading and writing too? Similar what is done using
the R bigmemory
(https://privefl.github.io/blog/Tip-Optimize-your-Rcpp-loops/) or
bigstatsr packages.

Kindest Regards,
Colin Mclean.

R script:
library(Rcpp)
library(arrow)

## compile c++ code
Sys.setenv("PKG_CXXFLAGS" = "-larrow")
sourceCpp("utils.cpp")

N = 10
X = arrow::Array$create(rep(0,N*N))

test( X$pointer() )


utils.cpp:
// define headers
// [[Rcpp::plugins(cpp11)]]
// [[Rcpp::depends(arrow)]]

#include <arrow/api.h>
#include <arrow/array.h>
#include <arrow/array/array_base.h>
#include <Rcpp.h>
#include <stdio.h>
#include <iostream>
#include <string>


using namespace Rcpp;
using namespace std;

// [[Rcpp::export]]
void test( XPtr<arrow::Array> aAPtr ){

   cout << "read & write arrow::Array in test " << endl;
   cout << aAPtr << endl;

}

--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.







--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.


Reply via email to