バツイチとインケンのエンジニアブログ
プログラムやプログラムじゃないこと

2018年版: Jupyter Notebook で Scala を動かす

2018-11-02
書いた人 : バツイチ
カテゴリ : Python, scala | タグ : jupyter

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-sh/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

こんな感じですね。

これは便利。

このエントリーをはてなブックマークに追加
Tweet

← Rust の Web Framework, actix_web のパフォーマンスをとことん測定する
actix_web は Actorモデルでどのようにwebリクエストを捌いているのか →

 

最近書いた記事

  • Ryzen7 3800XT でmini ITXオープンフレームPCを作る
  • Pythonで機械学習入門 競馬予測
  • HP ENVY 15 クリエイターモデルレビューとRAID0解除
  • JRA-VAN データラボを使って、競馬データを収集する
  • Surface Pro 3 にubuntu18.04を入れる

カテゴリー

  • Android
  • Apache Flink
  • API
  • AWS
  • bazel
  • BigQuery
  • Cassandra
  • Docker
  • Druid
  • Elasticsearch
  • Git
  • Golang
  • gradle
  • HDFS
  • JavaScript
  • jvm
  • Linux
  • MongoDB
  • MySQL
  • Nginx
  • Nodejs
  • PaaS
  • PHP
  • Python
  • RabbitMQ
  • Raspberry Pi
  • React Native
  • Redis
  • Riak
  • rust
  • scala
  • Scheme
  • SEO
  • solr
  • Spark
  • spray
  • Sublime Text
  • Swift
  • Tableau
  • Unity
  • WebIDE
  • Wordpress
  • Youtube
  • ひとこと
  • カンファレンス
  • スケジューラ
  • マイクロマウス
  • 広告
  • 技術じゃないやつ
  • 株
  • 機械学習
  • 競馬
  • 自作キーボード
  • 自然言語処理

アーカイブ

  • 2021年4月
  • 2021年2月
  • 2021年1月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年10月
  • 2019年9月
  • 2019年8月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年11月
  • 2018年9月
  • 2018年5月
  • 2018年3月
  • 2018年2月
  • 2017年9月
  • 2017年8月
  • 2017年6月
  • 2017年4月
  • 2017年3月
  • 2017年1月
  • 2016年10月
  • 2016年9月
  • 2016年8月
  • 2016年6月
  • 2016年5月
  • 2016年4月
  • 2016年3月
  • 2016年2月
  • 2016年1月
  • 2015年12月
  • 2015年11月
  • 2015年10月
  • 2015年9月
  • 2015年8月
  • 2015年6月
  • 2015年5月
  • 2015年2月
  • 2015年1月
  • 2014年12月
  • 2014年11月
  • 2014年9月
  • 2014年6月
  • 2014年5月
  • 2014年3月
  • 2014年2月
  • 2014年1月
  • 2013年12月
  • 2013年11月
  • 2013年10月
  • 2013年9月
  • 2013年8月

書いた人

  • バツイチちゃん
  • インケンくん

このブログについて

エンジニアとしての考え方が間逆な2人がしょーもないこと書いてます。

バツイチ

アイコン

IT業界で働くエンジニアです。名前の通りバツイチです。
理論や抽象的概念が好きだけど人に説明するのが下手。

インケン

アイコン

バツイチちゃんと同じ業界で働いています。
理論とか開発手法とかは正直どうでもよくて、
生活する上で役に立つことに使いたい

Copyright 2025 バツイチとインケンのエンジニアブログ