使用 Python for Spark 來編製 Script

SPSS Modeler 可以使用 Apache Spark 架構來執行 Python Script ,以處理資料。 本文件提供所提供介面的 Python API 說明。

SPSS Modeler 安裝包括 Spark 發行套件。

存取資料

資料以 Spark SQL DataFrame 形式在 Python/Spark Script 與執行環境定義之間傳送。 耗用資料的 Script(亦即除了「匯入」節點之外的任何節點)必須從環境定義擷取資料訊框:
inputData = asContext.getSparkInputData()
產生資料的 Script(亦即除了終端機節點之外的任何節點)必須將資料訊框傳回至環境定義:
asContext.setSparkOutputData(outputData)
您可以使用 SQL 環境定義在需要時從 RDD 建立輸出資料訊框:
outputData = sqlContext.createDataFrame(rdd)

定義資料模型

產生資料的節點還必須定義資料模型以說明節點的欄位可見下游。 在 Spark SQL 術語中,資料模型就是綱目。

Python/Spark Script 會以 pyspsark.sql.types.StructType 物件形式定義其輸出資料模型。 StructType 說明輸出資料訊框中的列,並且是從 StructField 物件清單進行建構。 每一個 StructField 皆說明輸出資料模型中的單一欄位。

您可以使用輸入資料訊框的 :schema 屬性來取得輸入資料的資料模型:
inputSchema = inputData.schema
可以將保持現狀傳遞的欄位從輸入資料模型複製到輸出資料模型。 可以使用 StructField 建構子來建立輸出資料模型中新的或已修改的欄位:
field = StructField(name, dataType, nullable=True, metadata=None)

如需建構子的相關資訊,請參閱 Spark 文件。

您必須至少提供欄位名稱及其資料類型。 您可以選擇性地指定 meta 資料,以提供欄位的測量、角色及說明 (請參閱 資料 meta 資料)。

DataModelOnly 模式

SPSS Modeler 需要在節點執行之前知道節點的輸出資料模型,才能啟用下游編輯。 為了取得 Python/Spark 節點的輸出資料模型, SPSS Modeler 會在沒有可用資料的特殊 資料模型 模式下執行 Script。 Script 可以在 Analytic Server 環境定義物件上使用 isComputeDataModelOnly 方法來識別此模式。

用於轉換節點的 Script 可以遵循以下一般型樣:
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 不會以任何方式解譯。 節點可以選擇性地將 MIME 類型指派給某個值,其目的是 SPSS Modeler 可能會在模型塊中顯示具有使用者已知類型的那些值。

此環境定義中的值可以是 PMML、HTML、影像等。 若要將值新增至模型內容(在建置 Script 中),請執行下列動作:
asContext.setModelContentFromString(key, value, mimeType=None)
若要從模型內容中擷取值(在評分 Script 中),請執行下列指令:
value = asContext.getModelContentToString(key)
作為捷徑,如果模型或模型的某個部分儲存至檔案系統中的檔案或資料夾,則您可以在一個呼叫中組合儲存至該位置的所有內容(在建置 Script 中):
asContext.setModelContentFromPath(key, path)

請注意,在此情況下,無法指定 MIME 類型,因為組合可能包含各種內容類型。

如果您在建置模型時需要一個暫時位置來儲存內容,則您可以從環境定義中取得適當的位置:
path = asContext.createTemporaryFolder()
若要將現有內容擷取至檔案系統中的暫時位置(在評分 Script 中),請執行下列指令:
path = asContext.getModelContentToPath(key)

錯誤處理

若要引發錯誤,請從 Script 擲出異常狀況,並將它顯示給 SPSS Modeler 使用者。 模組 spss.pyspark.exceptions 中預先定義了部分異常狀況。 例如:
from spss.pyspark.exceptions import ASContextException
if ... some error condition ...:
     raise ASContextException("message to display to user")