0 / 0
資料の 英語版 に戻る
Python for Spark を使用したスクリプト
最終更新: 2024年10月07日
Python for Spark を使用したスクリプト (SPSS Modeler)

SPSS Modeler は、 Apache Spark フレームワークを使用して Python スクリプトを実行し、データを処理できます。 ここでは、付属するインターフェース用の Python API について説明します。

SPSS Modeler インストールには、Spark ディストリビューションが含まれています。

データへのアクセス

データは、Spark SQL DataFrame の形式で、Python/Spark スクリプトと実行コンテキスト間で転送されます。 データを消費するスクリプト (つまり、インポート・ノードを除くすべてのノード) では、以下のように、コンテキストからデータ・フレームを取得する必要があります。
inputData = asContext.getSparkInputData()
データを生成するスクリプト (つまり、ターミナル ノードを除くすべてのノード) では、以下のように、データ フレームをコンテキストに返す必要があります。
asContext.setSparkOutputData(outputData)
必要な場合は、以下のように SQL コンテキストを使用して、RDD から出力データ フレームを作成することができます。
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 モード

SPSS Modeler は、下流での編集を可能にするために、ノードの実行前にノードの出力データ・モデルを認識する必要があります。 Python/Spark ノードの出力データ・モデルを取得するために、 SPSS Modeler は、使用可能なデータがない特殊な データ・モデルのみ モードでスクリプトを実行します。 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)

モデルの作成

モデルを作成するノードは、モデルを適用するノードが後でそのモデルを正確に再作成できるように、モデルを適切に記述するコンテンツを実行コンテキストに返す必要があります。

モデル・コンテンツは、キーと値のペアによって定義されます。この場合、キーと値の意味はビルド・ノードとスコア・ノードにのみ認識され、 SPSS Modeler によって解釈されることはありません。 オプションで、 SPSS Modeler がモデル・ナゲットでユーザーに既知のタイプを持つ値を表示することを意図して、MIME タイプを値に割り当てることができます。

このコンテキストの値は、 PMML、 HTML、イメージなどになります。 モデル・コンテンツに値を追加するには、ビルド・スクリプトで以下のように指定します。
asContext.setModelContentFromString(key, value, mimeType=None)
モデル コンテンツから値を取得するには、スコア スクリプトで以下のように指定します。
value = asContext.getModelContentToString(key)
モデル全体またはモデルの一部がファイル・システム内のファイルまたはフォルダーに保管されている場合は、簡単な方法として、その場所に保管されているすべてのコンテンツを 1 回の呼び出しでバンドルすることができます。これを行うには、ビルド・スクリプトで以下のように指定します。
asContext.setModelContentFromPath(key, path)

この場合、MIME タイプを指定するオプションはないことに注意してください。これは、バンドルにさまざまなコンテンツ タイプが含まれている可能性があるためです。

モデルの作成時にコンテンツを保管するための一時的な場所が必要な場合は、以下のように指定すると、適切な場所をコンテキストから取得することができます
path = asContext.createTemporaryFolder()
既存のコンテンツをファイル システム内の一時的な場所に取り込むには、スコア スクリプトで以下のように指定します。
path = asContext.getModelContentToPath(key)

エラー処理

エラーを発生させるには、スクリプトから例外をスローし、それを SPSS Modeler ユーザーに表示します。 一部の例外については、spss.pyspark.exceptions モジュールで事前に定義されています。 次に例を示します。
from spss.pyspark.exceptions import ASContextException
if ... some error condition ...:
     raise ASContextException("message to display to user")
生成 AI の検索と回答
これらの回答は、製品資料の内容に基づいて、 watsonx.ai のラージ言語モデルによって生成されます。 詳細