焼肉が食べたい

ただの日記です。技術的に学んだことも書こうと思っていますが、あくまで自分用メモです。

Scala/Sparkプログラミングをjupyter+brunelで快適に♫

Scala/Sparkだいすきですが、今度働くことになる会社はPython文化。
Scalaだって、Jupyter Notebook使えるし、matplotlibみたいに、ビジュアライゼーションできるよ!ということをアピールしたい、というのがモチベーションです。

ScalaをJupyterで使うために

Jupyter NotebookはもともとPythonの開発用にiPython Notebookとして開発されていましたが、
最近はカーネルさえインストールすれば、BashでもRubyでも、なんでも動くようになっていますね。
ということで、今回はScala/Sparkが動くカーネルを入れて動かしてみます。
Scalaを動かすためのカーネルとしては、Apache Toreeを使います。
Toree以外にもJupyter Notebook用Scalaカーネルとしては以下もありますが、開発が活発そうなのと、Apache Incubatorプロジェクトになっているので、
Toreeを選びました。
* IScala
* ISpark
* jupyter-scala

Brunelとは

PythonでいうMatplotlibのようなビジュアライゼーションライブラリとして、Scalaでは、Brunelが使えます。
ちなみにBrunelはScala以外にもPythonとRでも使えます。
結構おしゃれなグラフが色々かけて楽しそうです。

github.com

インストール手順

Toreeをインストールして、Jupyter Notebookを起動してみます。
手順は簡単。

pip install https://dist.apache.org/repos/dist/dev/incubator/toree/0.2.0/snapshots/dev1/toree-pip/toree-0.2.0.dev1.tar.gz
jupyter toree install --spark_home=/path/to/spark
jupyter notebook

早速試してみる

val ds = spark.read.option("header","true").csv("/Users/chiehayashida/work/tmp/test.csv")
ds.show()
//+----+----+
//|col1|col2|
//+----+----+
//|   1|   1|
//|   2|   2|
//|   3|   1|
//|   4|   5|
//|   5|   2|
//+----+----+

// Brunelパッケージをダウンロード・インクルードする。
%AddJar -magic https://brunelvis.org/jar/spark-kernel-brunel-all-2.4.jar 

// brunelで描画するために%%brunelを入れる
%%brunel
data('ds') bar x(col1) y(col2:reverse) label(col2) legends(all) title("test")

f:id:chie8842:20170417002240p:plain

気づいたこと

  • Brunelの対応するSparkバージョン Brunelでは現在Spark2.1以上には対応していないようで、
    以下のエラーが出てしまう。
%%brunel
data('ds') x(a) y(b)
// エラー内容
//Magic brunel failed to execute with error: 
//org/apache/spark/sql/DataFrame
  • 軸名の編集ができない Brunelで色々いじってみたけれど、X軸・Y軸の名前の編集ができなそう。