「Apache Arrow東京ミートアップ2018」のコード懇親会の時に到達できなかったサンプルを動かす環境を作るまでを、やり直して手順を整理したので書きます。
目次
動かしたいもの
尚、動かしたいものはここにある Apache ArrowのRバインディングとサンプルコードです。 github.com
環境
本当はWindowsネイティブで動かしたかったのですが、取り敢えず先に動かしてみたかったので、Windows10のWSLに立てた Ubuntu 18.04の環境に作りました。
また、他の環境を動かすために入れたものが変な影響を与えてくるのは嫌だったので、WSLのUbuntu環境をリセットして作業をしています。
前提
試してみてわかったのですが、このバインディングのサンプルを動かすには以下のものが必要です。
パッケージ等は依存関係を元にインストールする手順を想定しているので、インターネット接続できる環境で作業する前提です。
また、Ubuntuはrootユーザーにsuはできないので、作業は一般ユーザーで行い、特権が必要な時はsudoで行います。 (まぁ、分かっている人ばかりだと思いますが、一応)
事前作業
Apache Arrowのインストールをする時の手順の前段階で必要と思われる作業です。
OSの更新
何はともあれ、WSLのUbuntuをインストールした直後はパッケージがちょっと前のものだったりするので、パッケージの更新をしておきます。
sudo apt update sudo apt upgrade
ツールチェーン等のaptパッケージインストール
コンパイラなどのツールチェーンと後続の処理で必要になるライブラリをインストールします。
sudo apt install build-essential libcurl4-openssl-dev libssl-dev
Pythonのインストール
ここでは3系のPythonをインストールします。 併せてPython上にpandas pyarrowパッケージもインストールしておきます。
sudo apt install python3 python3-pip python3-dev sudo pip3 install pandas pyarrow
Gitの設定
今回の手順では直接は必要ありませんが、実際に開発をする時にcommitしたりpushする時に必要なのでここで設定しておきましょう。
git config --global user.name [あなたのGitユーザー名] git config --global user.email [あなたのメールアドレス]
aptリポジトリの追加
Rの最新版を入れる必要がある関係上、リポジトリを追加します。 ここでは最新版のRのビルドを提供しているrstudioのサイトから取るように設定します。
cat /etc/apt/sources.list sudo vi /etc/apt/sources.list
追加する内容は以下です。この行をファイルの最終行に追加してください。
deb https://cran.rstudio.com/bin/linux/ubuntu bionic-cran35/
追加が終わったら保存して、更新されていることを確認しましょう。
cat /etc/apt/sources.list
鍵の追加
次にrstudioのサーバーからの取得をするために鍵を追加します。
gpg --keyserver keyserver.ubuntu.com --recv-key E084DAB9 gpg -a --export E084DAB9 | sudo apt-key add -
パッケージリストを最新化した上でRをインストールします。
12/10時点ではR 3.5.1がインストールされました。
sudo apt update sudo apt install r-base r-base-dev
aptパッケージの追加インストール
R上に devtools パッケージをインストールするために必要なaptパッケージを追加でインストールします。 aptパッケージインストールが済んだら、Rを起動します。(インストール作業をするので sudoで特権ユーザーとして起動します)
sudo apt-get install libcurl4-gnutls-dev libxml2-dev libssl-dev
sudo -i R
Rの追加パッケージをインストール
R上に devtools 等の追加パッケージをインストールします。 インストールが終わったら、q() で Rの環境を抜けます。
install.packages('devtools') install.packages('reticulate') install.packages("tibble") q()
Apache Arrowのビルド準備
ここからはApache ArrowのRバインディングのページに書かれている手順をなぞります。
でも、結構足りない手順があったりするので、ここに書いた手順でやらないとエラーとかでハマります。
aptパッケージの追加インストール
Apache Arrowをビルドするために必要なパッケージをaptパッケージをインストールします。
sudo apt-get install cmake \ libboost-dev \ libboost-filesystem-dev \ libboost-system-dev \ libboost-regex-dev
libboost-regex-dev はC++版の手順には含まれていませんが、後で必要になったので入れています。
Apache Arrowのビルド
基本的には C++版を使うので、C++版の手順に従ってビルドします。
git clone https://github.com/apache/arrow.git cd arrow/cpp mkdir release cd release cmake .. -DCMAKE_BUILD_TYPE=Release sudo make install
R版の手順には cmake の時に以下のフラグが付いていますが、これをつけると Ubuntu環境ではエラーになるので外しています。
-DARROW_BOOST_USE_SHARED:BOOL=Off
jmarroc関連のエラーは libjemalloc-dev、autotools-dev をインストールすることで解消されました。
jemallocは無ければ無いで問題ないそうです。もしjemalloc関連のエラーが出たら
-DARROW_JEMALLOC=OFF
で使わない(エラーにならない)ようにできます。
Rバインディングのインストール
Rを起動します。インストール作業をするので sudoで特権ユーザーとして起動します。
sudo -i R
Rバインディングのインストールを実行します。 ビルドに必要なものはここまでで準備できているはずなので、無事にパッケージのビルドとインストールができるはずです。
devtools::install_github("apache/arrow/r")
稼働確認
Rバインディングのページに有るサンプルをR上で動かして、エラーにならず実行できることを確認します。
library(arrow, warn.conflicts = FALSE) library(tibble) library(reticulate) tf <- tempfile() (tib <- tibble(x = 1:10, y = rnorm(10))) arrow::write_arrow(tib, tf) pa <- import("pyarrow") as_tibble(pa$open_file(tf)$read_pandas())
まとめ
こんな感じで WSL上のUbuntu 18.04 LTS上でApache ArrowのRバインディングを動かす環境の構築をしました。 やっとこれで入り口にたった感じです。
ちなみに、ビルドなどがたくさん走るので、最初の手順からやると2,3時間はかかります。