Azure Synapse Analytics の Apache Spark プールで Spark NLP を使う
はじめに
タイトルのとおり、Apache Spark 向け自然言語処理ライブラリである Spark NLP を Azure Synapse Analytics の Apache Spark プールで使うための情報をまとめました。なお、本記事の対象は PySpark です。
問題
Synapse の Apache Spark プール へ PySpark 版の Spark NLP をインストールするだけでは、Spark NLP による処理実行のタイミングで TypeError: 'JavaPackage' object is not callable が発生してしまいます。(import までは成功します)
原因についてはこちらのスレッドで議論されていました。
解決法
Spark NLP の公式 GitHub リポジトリから FAT JAR ファイルを取得して Synapse の Apache Spark プールへインストールすることで解決します。
今回は執筆時点で最新の Spark NLP 4.1.0 と、サポートされている Apache Spark 3.2 および 3.1 の組み合わせで問題が解決することを確認しました。
- Apache Spark Support
- Azure Synapse Runtime for Apache Spark 3.2
- Azure Synapse Runtime for Apache Spark 3.1
手順
1. FAT JAR ファイルをダウンロードする
Spark NLP の公式 GitHub リポジトリから FAT JAR ファイルをダウンロードします。赤線で囲った、バージョン 4.1.0 の CPU 向けのものを選びます。
2. FAT JAR ファイルを Synapse ワークスペースへアップロードする
ダウンロードした FAT JAR ファイルを Synapse Studio からワークスペースパッケージとしてアップロードします。
3. FAT JAR ファイルを Synapse の Apache Spark プールへインストールする
Synapse Studio からインストールを行います。インストールには数分かかります。
4. Spark NLP を Synapse の Apache Spark プールへインストールする (まだインストールしていない場合)
以下の内容の requirement.txt ファイルを作成して Synapse Studio からプールパッケージとしてインストールします。FAT JAR ファイルと同様にインストールには数分かかります。
spark-nlp==4.1.0
動作確認
実行するコードは下記ブログ記事を参考にさせていただきました。
-
日本語に対してSpark NLPを使う
今度は TypeError: 'JavaPackage' object is not callable が発生せず結果が返ってきました!上記スクリーンショットは Apache Spark 3.2 のものですが、3.1 でも同様に成功しました。
補足情報
- FAT JAR ファイルはセッションスコープの Java または Scala パッケージとしてもインストールできますが、別途 Azure Storage へのアップロードやコード内でのパス指定が発生して面倒なため Synapse Studio からインストールが完結するワークスペースパッケージとしてのインストールを選択しました。
- Spark NLP につていも、セッションスコープの Python パッケージとしてのインストールが可能ですが、今回選択したワークスペースパッケージと同じプール単位でのインストールができるプールパッケージにてインストールする手順を選択しました。
まとめ
無事 Synapse の Apache Spark プール上でも Spark NLP を動かすことが出来ました。
以上です。🍵
Discussion