Jupyter Notebook 便利ですよね!
REPL感覚で使えるけれど、REPLより使い勝手良いし、セルごとに何度もやり直しできるし、リンクを共有すればコードもさくっと共有できます。
Scala にも spark-notebook や Apache Zeppelin などの ノートブック形式Webアプリケーションがいくつかありますが、いつも使っている Jupyter Notebook で Scala を動かしたかったので、今回 Jupyter Notebook のカーネルに Scala を追加しました。
この記事を書いた経緯なのですが、「jupyter-scala」 の名称が変わっていたりインストールの仕方が変化していたため、一旦まとめた次第です。
※ この記事を書いているのは 2018.11.01であり、今後も変更の可能性は大いにあります。。。
Jupyterのインストール
既に Jupyter をインストール済みの方は読み飛ばしちゃってください💦
Pythonのインストール
私は Anaconda派なので Anacondaの3系 を入れます。
$ wget https://repo.anaconda.com/archive/Anaconda3-5.3.0-Linux-x86_64.sh $ chmod +x Anaconda3-5.3.0-Linux-x86_64.sh $ ./Anaconda3-5.3.0-Linux-x86_64.sh # ポリシーの同意や、インストールパスを聞かれます. 私は /usr/local/anaconda3 をプリフィクスにしました. $ python --version
PATHに /usr/local/anaconda3/bin が追加されたので反映します.
$ source ~/.bashrc
nbextensionsのインストール
nbextensions は Jupyter Notebook を便利にするための拡張機能です。
便利なので、私は入れましたが、飛ばして頂いても問題ないです。
pip install jupyter_contrib_nbextensions jupyter contrib nbextension install jupyter contrib nbextensions migrate
profileの作成
Jupyter Notebook の設定ファイルを生成します。
jupyter notebook --generate-config vi ~/.jupyter/jupyter_notebook_config.py ~ # 設定を変更します. # 特に必要がなければやらなくて大丈夫ですが、サーバで公開する場合は下記の変更が必要です. c.NotebookApp.ip = '0.0.0.0' c.NotebookApp.open_browser = False # c.NotebookApp.port = 8888 # 8888 以外で公開するなら #c.NotebookApp.password = '' # 設定したほうがベター ~
Jupyter のインストールはこれで終わりです。
coursierインストール
次章で紹介する almond をインストールするために
coursier という Scalaライブラリ高速フェッチャー が必要なので、まずはこちらをインストールします。
$ curl -L -o coursier https://git.io/coursier && chmod +x coursier && ./coursier --help
※ 公式サイトそのままです 💦 …少し時間がかかります。
パスを通すか、パスの通っている場所へ置きます。
$ mv ./coursier /opt/bin $ echo "PATH=/opt/bin:$PATH" >> ~/.bashrc $ which coursier /opt/bin/coursier
almondインストール
2018年現在、Jupyter の Scala カーネル(jupyter-scala)は almond として提供されるようになったようです。
almond は前章でインストールした coursier を使います。
$ SCALA_VERSION=2.12.7 $ ALMOND_VERSION=0.1.10 $ coursier bootstrap \ -i user -I user:sh.almond:scala-kernel-api_$SCALA_VERSION:$ALMOND_VERSION \ sh.almond:scala-kernel_$SCALA_VERSION:$ALMOND_VERSION \ -o almond
※ 公式サイトそのままです 💦
あとは almond コマンドを実行するだけです。
$ ./almond --install
Jupyter Notebookの起動
あとは起動するだけです。
nohup jupyter notebook & tail -f nohup.out
Scalaカーネルの起動
ブラウザから Jupyter Notebook にアクセスします。
カーネルで Scala が選択できるようになっています。
試しに notebook を作成して実行してみます。
特別な設定なく普通に実行できました。
これは快適です。
jar依存の追加
almond は Ammonite の薄いラッパーだそうでして、依存解決も Ammonite によって提供されています。
試しに、 cats と circe への依存を追加してみます。
適当なセルで下記のように入力し、実行します。
import $ivy.`org.typelevel::cats-core:1.4.0` import $ivy.`io.circe::circe-parser:0.10.1`
jar のダウンロードログが出ます。
scala バージョン付き jar は 先頭の : を 2個(::)にします(Java用のは1個)。
簡単な、 cats を使ったコードを実行してみます。
"apple".some |+| " pineapple".some
こんな感じですね。
これは便利。