Apatch Spark は JVM 上に実装されたオープンソースの分散処理プログラミング環境で、近年急速な盛り上がりを見せています。 今後 pyspark を通じて Spark を使う予定なので、試しに触ってみたいのですが、いかんせん JVM に慣れていないこともあって Spark のインストールから始めると大変です。
そこでこの記事では Docker を使って Spark と pyspark の環境を構築します。
環境を用意する¶
Jupyter Lab が公開している jupyter/pyspark-notebook というズバリな Docker イメージがあるのでこれを使います。さしあたり最新バージョンをとってきました:
docker pull jupyter/pyspark-notebook:87210526f381
起動します:
docker run --rm -w /app -p 8888:8888 \
--mount type=bind,src=$(pwd),dst=/app \
jupyter/pyspark-notebook:87210526f381
すると何やらログが表示される中に URL が表示されるので、その URL にアクセスすれば pyspark が使える Jupyter Notebook が表示されます。簡単ですね。
In [1]:
import pyspark
pyspark.version.__version__
Out[1]:
ちなみにこの記事はまさにこうして起動した Jupyter Notebook を使って書かれています。
Spark クラスタを起動する¶
Spark は通常クラスタを作って分散処理を行いますが、開発段階からクラスタを作るのは大変なので local mode が用意されています。
pyspark から local mode で Spark を起動するには pyspark.SparkContext
を実行します:
In [2]:
sc = pyspark.SparkContext('local[*]')
渡している文字列は利用可能スレッド数を意味していて:
local
- 1 スレッドのみ使うlocal[n]
-n
スレッド使う(n
は実際には数字が入る)local[*]
- JVM で使えるプロセッサーの数だけスレッドを使う(内部ではRuntime.getRuntime.availableProcessors()
を使っているらしい)
ということを表しています。一般的には local[*]
が使われるようです。
試しに 0 から 10 までの数字の合計を計算してみます。
In [3]:
rdd = sc.parallelize(range(10))
rdd.sum()
Out[3]:
使い終わったら停止します。
In [4]:
sc.stop()