IntelliJ IDEAでpyspark用の開発環境を設定する手順
(2021.5.23追記)
venv環境へのpyspark設定部分は、以下エントリのやり方がスムーズかと思います。
venv環境にpysparkを設定する手順
https://takemikami.com/2021/05/23/venvpyspark.html
本エントリでは、IntelliJ IDEAを使って、
pysparkの開発環境を設定する手順を示します。
# 私はIntelliJ IDEA Ultimate Editionを使っていますが、
# CEやpycharmでも、おそらく同様の手順だと思います。
以下の流れで手順を進めていきます。
- Apache Sparkのダウンロードと展開
- pyspark用のPythonプロジェクト作成
- サンプルコードを作成
- 単体テストの実行
- IntelliJ IDEAでプロジェクトを開きSDKを設定
- IntelliJ IDEAでの単体テスト実行
Apache Sparkのダウンロードと展開
spark.apache.orgから、Apache Sparkをダウンロードします。
Downloads | spark.apache.org
https://spark.apache.org/downloads.html
このエントリの手順では「spark-2.4.0-bin-hadoop2.7.tgz」をダウンロードしました。
このファイルを適当な場所に展開します。
$ tar zxf spark-2.4.0-bin-hadoop2.7.tgz
以下のようにspark-shellを実行してversionが表示されることを確認します。
$ export SPARK_HOME=※展開先※/spark-2.4.0-bin-hadoop2.7
$ $SPARK_HOME/bin/spark-shell --version
pysparkのバージョン確認
以下のように、展開したApache Sparkに含まれるpysparkのバージョンを確認します。
$ head $SPARK_HOME/python/pyspark.egg-info/PKG-INFO
Metadata-Version: 2.1
Name: pyspark
Version: 2.4.0
Summary: Apache Spark Python API
Home-page: https://github.com/apache/spark/tree/master/python
Author: Spark Developers
Author-email: dev@spark.apache.org
License: http://www.apache.org/licenses/LICENSE-2.0
Description: Apache Spark
ここでは、「2.4.0」が含まれている事が確認出来ました。
pyspark用のPythonプロジェクト作成
以下のように、pysparkを使うサンプルモジュールのディレクトリを準備します。
$ mkdir pyspark-sample
$ cd pyspark-sample
$ mkdir pysparksample tests
$ touch pysparksample/__init__.py tests/__init__.py
venvで仮想環境を作り、切り替えます。
$ python3 -m venv venv
$ source venv/bin/activate
前項で確認したpysparkのversionを指定して、pysparkをインストールします。
$ pip install pyspark==2.4.0
サンプルコードを作成
以下のようなサンプルコードを作成します。
pysparksample/main.py
from pyspark.sql import SparkSession, SQLContext
def target():
spark = SparkSession.builder.appName('sample').getOrCreate()
sqlContext = SQLContext(spark)
df = sqlContext.createDataFrame([(1, "one"), (2, "two"), (3, "three")], ["id", "body"])
return df
tests/test_main.py
import unittest
from pysparksample import main
class TestCases(unittest.TestCase):
def test_sample(self):
df = main.target()
self.assertEqual(3, df.groupby().count().first()['count'])
単体テストの実行
単体テスト用にpytestをinstallします。
$ pip install pytest
以下のように単体テストが実行されることを確認します。
$ pytest tests/
======================== test session starts ========================
platform darwin -- Python 3.6.5, pytest-4.0.1, py-1.7.0, pluggy-0.8.0
rootdir: /Users/mikamitakeshi/tmp/pyspark-sample, inifile:
collected 1 item
tests/test_main.py . [100%]
===================== 1 passed in 8.26 seconds ======================
# 失敗する場合は、環境変数「SPARK_HOME」が正しいかを確認します。
IntelliJ IDEAでプロジェクトを開きSDKを設定
IntelliJ IDEAを起動し、
Openから、pyspark用のPythonプロジェクトを指定して開きます。
プロジェクトを開いた後、
File → Project Structure メニューを選択します。
ProjectSDK → New から 「Python SDK」を選択します。
Virtualenv Environment を選び、
Existing environmentで、「※プロジェクトのパス※/venv/bin/python」を指定します。
「pysparksample/main.py」を開き、
ライブラリ依存関係のエラーが出ていないことを確認します。
IntelliJ IDEAでの単体テスト実行
「tests/test_main.py」を開き、
Run → Edit Configuration メニューを選択し、
Python Test → Unittests を選びます。
Environment Variablesを選択し、
環境変数「SPARK_HOME」を追加します。
(「Apache Sparkのダウンロードと展開」項で指定した値)
「tests/test_main.py」コードの左側の三角記号から、
単体テストを実行します。
以上の手順によって、IntelliJ IDEAでpyspark用の開発環境の設定ができました。
ここまで書いておいてアレですが、
Pythonを使う特別な理由が無ければ、
Apache Sparkでの開発は、Scalaを使った方が楽かなと思います(個人的には)。