Creazione di script con Python per Spark

SPSS Modeler è possibile eseguire script Python utilizzando il framework Apache Spark per elaborare i dati. Questa documentazione fornisce la descrizione di API Python per le interfacce fornite.

L'installazione SPSS Modeler include una distribuzione Spark.

Accesso ai dati

I dati vengono trasferiti tra uno script Python/Spark e il contesto di esecuzione nella forma di un Spark SQL DataFrame. Uno script che utilizza i dati (cioè qualsiasi nodo ad eccezione di un nodo di importazione) deve recuperare la struttura dati dal contesto:
inputData = asContext.getSparkInputData()
Uno script che produce i dati (cioè qualsiasi nodo ad eccezione di un nodo terminale) deve restituire una struttura dati al contesto:
asContext.setSparkOutputData(outputData)
Si può utilizzare il contesto SQL per creare una struttura dati di output da un RDD quando necessario:
outputData = sqlContext.createDataFrame(rdd)

Definizione del modello di dati

Un nodo che produce dati deve anche definire un modello dati che descrive i campi visibili nel downstream del nodo. Nella terminologia Spark SQL , il modello di dati è lo schema.

Uno script Python/Spark definisce il relativo modello dati di output nella forma di un oggetto pyspsark.sql.types.StructType. Un StructType descrive una riga nella struttura dati di output e viene creato da un elenco di oggetti StructField. Ogni StructField descrive un singolo campo nel modello dati di output.

È possibile ottenere il modello di dati per i dati di input utilizzando :schema l'attributo del frame dei dati di input:
inputSchema = inputData.schema
I campi che non sono stati modificati possono essere copiati dal modello dati di input al modello dati di output. I campi nuovi o modificati nel modello dati di output possono essere creati utilizzando il costruttore StructField
field = StructField(name, dataType, nullable=True, metadata=None)

Fare riferimento alla documentazione Spark per ulteriori informazioni sul costruttore.

È necessario fornire almeno un nome campo e il relativo tipo di dati. Facoltativamente, è possibile specificare metadati per fornire una misura, un ruolo e una descrizione per il campo (vedere Metadati dei dati ).

Modalità DataModelOnly

SPSS Modeler deve conoscere il modello dei dati di output di un nodo, prima che il nodo venga eseguito, per consentire la modifica a valle. Per ottenere il modello di dati di output per un nodo Python /Spark, SPSS Modeler esegue lo script in una modalità speciale solo modello di dati in cui non sono disponibili dati. Lo script può identificare questa modalità utilizzando il metodo isComputeDataModelOnly sull'oggetto di contesto Analytic Server.

Lo script per un nodo di trasformazione può seguire questo pattern generale:
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)

Creazione di un modello

Un nodo che crea un modello deve restituire al contesto di esecuzione il contenuto che descrive sufficientemente il modello in modo che il nodo che lo applica possa ricrearlo esattamente in un successivo momento.

Il contenuto del modello è definito in termini di coppie chiave/valore, dove il significato delle chiavi e dei valori è noto solo ai nodi di costruzione e punteggio e non viene interpretato in alcun SPSS Modeler modo da. Facoltativamente, il nodo può assegnare un tipo MIME a un valore con l'intento di SPSS Modeler visualizzare quei valori che hanno tipi noti all'utente nel nugget del modello.

Un valore in questo contesto può essere PMML, HTML, un'immagine, ecc. Per aggiungere un valore al contenuto del modello (nello script di compilazione):
asContext.setModelContentFromString(key, value, mimeType=None)
Per recuperare un valore dal contenuto del modello (nello script di calcolo del punteggio).
value = asContext.getModelContentToString(key)
Da un collegamento, in cui un modello o parte di un modello è archiviato in un file o cartella nel filesystem, è possibile mettere insieme l'intero contenuto archiviato in tale ubicazione in una chiamata (nello script di build):
asContext.setModelContentFromPath(key, path)

Considerare che in questo caso non è possibile specificare un tipo MIME perché il bundle può contenere diversi tipi di contenuto.

Se è necessaria un'ubicazione temporanea per archiviare il contenuto durante la creazione del modello è possibile ottenere un'appropriata ubicazione dal contesto:
path = asContext.createTemporaryFolder()
Per recuperare il contenuto esistente in un'ubicazione temporanea nel filesystem (nello script di calcolo del punteggio):
path = asContext.getModelContentToPath(key)

Gestione degli errori

Per segnalare gli errori, generare un'eccezione dallo script e visualizzarla SPSS Modeler all'utente. Alcune eccezioni sono predefinite nel modulo spss.pyspark.exceptions. Ad esempio:
from spss.pyspark.exceptions import ASContextException
if ... some error condition ...:
     raise ASContextException("message to display to user")