Python for Spark を使用したスクリプト
IBM® SPSS® Modeler は、データを処理するために Apache Spark フレームワークを使用しながら Python スクリプトを実行することができます。ここでは、付属するインターフェース用の Python API について説明します。
IBM SPSS Modeler インストールには、Spark ディストリビューションが含まれています (例えば、IBM SPSS Modeler 18.3 には、Spark 2.4.6 が含まれています)。
前提条件
- Python/Spark スクリプトを IBM SPSS Analytic Server に対して実行するには、Analytic Server に接続する必要があります。また、Analytic Server が、互換性のある Apache Spark のインストール済み環境にアクセスできる状態になっている必要があります。Apache Spark を実行エンジンとして使用する方法については、IBM SPSS Analytic Server の資料を参照してください。
- Python/Spark スクリプトを IBM SPSS Modeler Server (または Windows 64 または Mac64 を必要とする IBM SPSS Modeler クライアントに含まれるローカル サーバー) に対して実行する場合、Python をインストールしたり、その Python インストール済み環境を使用するために options.cfg を編集したりする必要はなくなりました。バージョン 18.1 以降では、IBM SPSS Modeler に Python ディストリビューションが含まれるようになりました。
ただし、デフォルトの IBM SPSS Modeler Python ディストリビューションに含まれない特定のモジュールが必要な場合は、<Modeler_installation_directory>/python に移動し、追加のパッケージをインストールできます。IBM SPSS Modeler に Python ディストリビューションが含まれるようになりましたが、以前のリリースと同様に、必要に応じて options.cfg に次のオプションを追加することにより、独自の Python インストール済み環境を指定できます。
Windows の例:# Set to the full path to the python executable (including the executable name) to enable use of PySpark. eas_pyspark_python_path, ""
Linux の例:eas_pyspark_python_path, "C:¥¥Your_Python_Install¥¥python.exe"
eas_pyspark_python_path, "/Your_Python_Install/bin/python"
注: 独自の Python インストール済み環境を指定する場合、バージョン 3.7.x である必要があります。IBM SPSS Modeler は Anaconda 3 および Python 3.7.6 でテスト済みです。
IBM SPSS Analytic Server のコンテキスト オブジェクト
import spss.pyspark.runtime
asContext = spss.pyspark.runtime.getContext()
sparkContext = asc.getSparkContext()
sqlContext = asc.getSparkSQLContext()
Spark コンテキストと SQL コンテキストについては、Apache Spark の資料を参照してください。
データへのアクセス
inputData = asContext.getSparkInputData()
asContext.setSparkOutputData(outputData)
outputData = sqlContext.createDataFrame(rdd)
データ モデルの定義
データを生成するノードでは、そのノードの下流で表示されるフィールドを記述するデータ モデルも定義する必要があります。Spark SQL の用語では、データ モデルはスキーマと呼ばれます。
Python/Spark スクリプトでは、pyspsark.sql.types.StructType
オブジェクトの形式で出力データ モデルが定義されます。StructType
は、StructField
オブジェクトのリストから構成され、出力データ フレーム内の行を記述します。
それぞれの StructField
により、出力データ モデル内の 1 つのフィールドが記述されます。
:schema
属性を使用して、入力データのデータ モデルを取得することができます。inputSchema = inputData.schema
StructField
コンストラクタを使用して、出力データ モデル内の新しいフィールドや変更されるフィールドを作成することができます。field = StructField(name, dataType, nullable=True, metadata=None)
このコンストラクタについては、Spark の資料を参照してください。
少なくとも、フィールド名とそのフィールドのデータ型を指定する必要があります。必要に応じて、フィールドの尺度、役割、説明を設定するためのメタデータを指定することができます (データのメタデータを参照)。
DataModelOnly モード
下流での編集を有効にするには、特定のノードを実行する前に、そのノードの出力データ モデルを IBM SPSS Modeler に認識させる必要があります。使用可能なデータがない場合、IBM SPSS Modeler は、Python/Spark ノードの出力データ モデルを取得するために、データ モデル専用モードという特殊なモードでスクリプトを実行します。Analytic Server コンテキスト オブジェクトで isComputeDataModelOnly
メソッドを使用すると、スクリプトでこの特殊なモードを識別することができます。
if asContext.isComputeDataModelOnly():
inputSchema = asContext.getSparkInputSchema()
outputSchema = ... # construct the output data model
asContext.setSparkOutputSchema(outputSchema)
else:
inputData = asContext.getSparkInputData()
outputData = ... # construct the output data frame
asContext.setSparkOutputData(outputData)
モデルの作成
モデルを作成するノードは、そのモデルを適切に記述する何らかのコンテンツを実行コンテキストに返す必要があります。これにより、そのモデルを適用するノードが、後でそのモデルを正確に再作成できるようになります。
モデルのコンテンツは、キーと値のペアという観点から定義されます。この場合、キーと値の意味はビルド ノードとスコア ノードでのみ認識され、Modeler がキーと値の意味を解釈することはありません。必要な場合は、ノードで MIME タイプを特定の値に割り当て、ユーザーが認識できるタイプの値を Modeler のモデル ナゲットに表示することができます。
asContext.setModelContentFromString(key, value, mimeType=None)
value = asContext.getModelContentToString(key)
asContext.setModelContentFromPath(key, path)
この場合、MIME タイプを指定するオプションはないことに注意してください。これは、バンドルにさまざまなコンテンツ タイプが含まれている可能性があるためです。
path = asContext.createTemporaryFolder()
path = asContext.getModelContentToPath(key)
エラー処理
spss.pyspark.exceptions
モジュールで事前に定義されています。以下に例を示します。from spss.pyspark.exceptions import ASContextException
if ... some error condition ...:
raise ASContextException("message to display to user")