今回はローカルで動作している PySpark のドライバプログラムを Jupyter Notebook から操作する方法について。 ようするに Jupyter Notebook と PySpark (のドライバ) が同じマシン上で動く場合ということ。 この場合の設定内容はとてもシンプルで、環境変数を書き換えるだけで使えるようになる。
これがもし Jupyter Notebook と PySpark のホストが分かれていると、もうちょっと複雑になる。 具体的には Apache Ivy と SparkMagic というソフトウェアを連携させないといけない。 それについては今後改めて書くつもり。
使った環境は次の通り。
$ cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) $ uname -r 3.10.0-693.11.1.el7.x86_64 $ pyspark --version Welcome to ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ `/ __/ '_/ /___/ .__/\_,_/_/ /_/\_\ version 2.2.1 /_/ Using Scala version 2.11.8, OpenJDK 64-Bit Server VM, 1.8.0_161 Branch Compiled by user felixcheung on 2017-11-24T23:19:45Z Revision Url Type --help for more information. $ python3 -V Python 3.6.4
ドライバのホストに Jupyter Notebook をインストールする
まずは PySpark のドライバを動かしているホストに Jupyter Notebook をインストールする。 どうせ後から必要になるので pandas とかも入れておくと良いかも。
$ sudo pip3 install jupyter pandas
PySpark が Jupyter Notebook を起動するように環境変数を設定する
続いては PySpark を使うときインタプリタとして Jupyter Notebook を使うように環境変数を設定する。
$ cat << 'EOF' >> ~/.bashrc export PYSPARK_PYTHON=/usr/bin/python3 export PYSPARK_DRIVER_PYTHON=jupyter export PYSPARK_DRIVER_PYTHON_OPTS='notebook' pyspark EOF $ source ~/.bashrc
後は通常通り PySpark を起動すれば、同時に Jupyter Notebook が使えるようになる。
この環境では YARN を使って Spark クラスタを構築した。
そのため --master
に yarn
を指定している。
$ pyspark --master yarn
あとはブラウザで Jupyter Notebook が動作している場所を開くだけ。
$ open http://localhost:8888
PySpark のドライバがリモートで動作している場合
作業しているホストがローカルホストでないときは PYSPARK_DRIVER_PYTHON_OPTS
で Listen するアドレスを指定する。
任意のアドレスで Listen するときは、次のように --ip
に 0.0.0.0
を指定する。
$ cat << 'EOF' >> ~/.bashrc export PYSPARK_PYTHON=/usr/bin/python3.6 export PYSPARK_DRIVER_PYTHON=jupyter export PYSPARK_DRIVER_PYTHON_OPTS='notebook --ip=0.0.0.0' pyspark EOF
先ほど紹介したのと同じように起動する。
$ pyspark --master yarn
起動するとコンソールにトークンを含む URL が表示されるはず。
表示された URL を、必要に応じて IP アドレス部分を書き換えたらブラウザで開くだけ。
$ open http://192.168.33.10:8888/?token=XXXXX...
動作確認
Jupyter Notebook の画面が開いたら新しいノートブックを作成して、ちゃんと PySpark が動くか確認しよう。
例えば SparkContext がちゃんと使えるか、とか。
In:
sc
Out:
SparkContext
Spark UI
Version
v2.2.1
Master
yarn
AppName
PySparkShell
分散処理の部分がちゃんと動くかを確かめるためにワードカウントしてみたりね。
In: rdd = sc.parallelize(['A', 'B', 'C', 'A']) keyvalues = rdd.map(lambda x: (x, 1)) counts = keyvalues.reduceByKey(lambda a, b: a + b) counts.collect() Out: [('A', 2), ('B', 1), ('C', 1)]
いじょう。

入門 PySpark ―PythonとJupyterで活用するSpark 2エコシステム
- 作者: Tomasz Drabas,Denny Lee,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/11/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る

スマートPythonプログラミング: Pythonのより良い書き方を学ぶ
- 作者: もみじあめ
- 発売日: 2016/03/12
- メディア: Kindle版
- この商品を含むブログ (1件) を見る