LoginSignup
8
4

More than 5 years have passed since last update.

Spark/ScalaをJupyter Notebookから実行する

Last updated at Posted at 2019-03-16

ちょっとした時のSpark/Scalaコードをチームに共有する際、
Jupyterノートブックとしてコードを共有できる方がいいかと思い、

  • Pythonのインストール
  • Sparkのインストール
  • ノートブックでのコードの実行

こららの一連の手順についてまとめてみました。
よくあるApache Toreeを使った手順になっています。

Python(Anaconda)のインストール

pyenvのインストール

$ brew update
$ brew install pyenv

環境変数の設定

$ echo 'export PYENV_ROOT="${HOME}/.pyenv"' >> ~/.zshrc
$ echo 'export PATH="${PYENV_ROOT}/bin:$PATH"' >> ~/.zshrc
$ echo 'eval "$(pyenv init -)"' >> ~/.zshrc

$ exec $SHELL -l

Anacondaのインストール

インストール可能なanacondaのバージョン一覧を取得する。

$ pyenv install -l | grep anaconda
  anaconda-1.4.0
  anaconda-1.5.0
 ...
  anaconda3-5.3.1
  anaconda3-2018.12

現時点の最新版をインストールします。

$ pyenv install anaconda3-5.3.1

バージョンを最新のものに切り替えます。

# バージョンの設定
$ pyenv global anaconda3-5.3.1

# 切り替わったことの確認
$ pyenv versions
  system
* anaconda3-5.3.1 (set by /Users/yuichi.nagakura/.pyenv/version)

一回ログアウトしてからPythonのバージョンを確認します。

$ python -V
Python 3.7.0

Jupyterもインストールされているか確認します。

$ jupyter --version
4.4.0

Apache Sparkのインストール

Apache Toreeを使うには、Sparkが必要になります。
Sparkをインストールします。

# ダウンロード
$ curl -O http://ftp.kddilabs.jp/infosystems/apache/spark/spark-2.4.0/spark-2.4.0-bin-hadoop2.7.tgz

# 解凍
$ tar xvfz spark-2.4.0-bin-hadoop2.7.tgz

# シンボリックリンクの作成
$ ln -s $HOME/spark-2.4.0-bin-hadoop2.7 $HOME/spark

環境変数を設定します。

$ echo 'export SPARK_HOME=$HOME/spark' >> ~/.bash_profile
$ echo 'export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin' >> ~/.bash_profile

$ source ~/.bash_profile

Apache Toreeのインストール

参考) Apache Toree Quickstart
https://toree.apache.org/docs/current/user/quick-start/

$ pip install --upgrade toree

$ jupyter toree install --spark_home=$SPARK_HOME --interpreters=Scala

これで準備完了です。

Jupyter Notebookの起動

ノートブックを起動します。
私はSparkContextが必要なかったことと、ローカルモードでSparkを使いたかったので、以下のようにオプションを指定して起動しています。

$ TOREE_OPTS='--nosparkcontext' SPARK_OPTS='--master=local[2]' jupyter notebook

ScalaコードをJupyterNotebookに書く

NewApache Toree Scalaを選択してノートブックを作成します。

note1.png

コードは以下のような感じで書いてみました。
コードと実行結果を記録として残せるのでいい感じです。

スクリーンショット 2019-03-16 19.51.33.png

ハマったポイントとして、ノートブックで実行する場合には、sparkセッション生成時にenableHiveSupportをつけないと、MetaStoreが有効にならなかったことくらいでしょうか。MetaStoreのデータベースをMySQLやPostgreSQLなどのDBを使っていない場合は不要っぽいです。

val spark = SparkSession.builder()
    .enableHiveSupport
    .master("local")
    .getOrCreate()
8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4