NetflixがOSS化したScala/Spark用ノートブックPolynoteを試してみる

もう1年以上前の話になりますが、NetflixがSpark対応のScala用ノートブックPolynoteをOSS化したという話がありました。

netflixtechblog.com

既存のノートブックではScalaを使っていてもコード補完などがあまり効かないものが多く、まとまったコードを書くときは結局IDEを使うという感じになりがちなのですが、PolynoteはScala第一言語としてサポートする珍しいノートブックで、コード補完などの機能も充実しているようなので遅ればせながら試してみました。

インストール

Sparkを使う場合、まずは先にSparkをインストールしておく必要があります。とりあえずローカルモードで動かすだけであればSparkのリリースディストリビューションをダウンロードして適当なディレクトリに展開しておくだけでOKですが、Polynoteは内部的にspark-submitコマンドを実行するので、最低限の設定としてSPARK_HOME/binディレクトリを環境変数PATHに追加しておく必要があります。

続いてPolynoteのリリースページからpolynote-dist.tar.gzをダウンロードして適当なディレクトリに展開します。

github.com

必要なPythonライブラリをインストールしてからpolynote.pyを実行するとhttp://localhost:8192/でノートブックが起動します。

$ pip install -r requirements.txt
$ ./polynote.py

Sparkを使うにはノートブックの設定でspark.masterを設定しておく必要があります(設定の変更後は「Save」もしくは「Save & Restart」をクリックして設定を反映する必要があります)。

f:id:takezoe:20210503133722p:plain

使ってみる

ノートブックのセルにはMonaco Editorが使われており、確かにScalaのコード補完もばりばり効きますし、変数のインスペクションができたりと、Scala向けに作られているだけのことはあります。SparkのDataFrameだけでなくScalaのコレクションをプロットすることもできます。

f:id:takezoe:20210503134157p:plain

f:id:takezoe:20210503133802p:plain

これはSparkを使わなくてもちょっとしたScalaコードを動かしたりするのにいいかも…と思ったのですが、少し使っているとかなり編集がもっさりしてきてカーソルを動かすだけでも一瞬間が開いてしまう感じになってしまいました。

ローカルで動かしていたのでマシンスペックの問題もあるのかもしれませんが、ちょっとしたScalaコードを1セル内で編集しているだけでこのもっさり感だとちょっとPolynote上でScalaコードを編集するのは厳しいかもしれないという気がしました。機能的にはよさげなだけに勿体ないなぁという気持ちです。

Polynoteの実装について

PolynoteはScalaで書かれているようなので軽くコードも読んでみました。

まとめ

Polynote、もうちょっとサクサク動くようになってほしい!