yt coffee

Study hard, play harder.

Docker を使って pyspark に入門する

  • 2019-01-16 11:50
  • pyspark

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]:
'2.4.0'

ちなみにこの記事はまさにこうして起動した 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]:
45

使い終わったら停止します。

In [4]:
sc.stop()

おわりに

この記事では Docker を使って pyspark 環境を作り、実際に Spark クラスタを起動してみました。Spark のことはまだまだ全然分かりませんが少しずつできることを増やしていこうと思います。

参考