0 / 0
Retourner à la version anglaise de la documentation
Scriptage avec Python for Spark
Dernière mise à jour : 04 oct. 2024
Scriptage avec Python pour Spark (SPSS Modeler)

SPSS Modeler peut exécuter des scripts Python à l'aide de l'infrastructure Apache Spark pour traiter les données. Cette documentation présente une description de l'API Python pour les interfaces fournies.

L'installation de SPSS Modeler inclut une distribution Spark.

Accès aux données

Les données sont transférées entre un script Python/Spark et le contexte d'exécution sous forme d'une trame de données SQL Spark. Un script qui consomme des données (c'est-à-dire tout noeud à l'exception d'un noeud Importation) doit extraire le DataFrame du contexte :
inputData = asContext.getSparkInputData()
Un script qui produit des données (c'est-à-dire tout noeud à l'exception d'un noeud final) doit renvoyer une trame de données au contexte :
asContext.setSparkOutputData(outputData)
Vous pouvez utiliser le contexte SQL pour créer une trame de données de sortie à partir de RDD, si nécessaire :
outputData = sqlContext.createDataFrame(rdd)

Définition du modèle de données

Un noeud qui produit des données doit également fournir un modèle de données qui décrit les champs visibles en aval du noeud. Dans la terminologie SQL Spark, le modèle de données est le schéma.

Un script Python/Spark définit son modèle de données de sortie sous forme d'un objet pyspsark.sql.types.StructType. StructType décrit une ligne dans la trame de données de sortie et est construit à partir d'une liste d'objets StructField. Chaque StructField décrit un seul champ dans le modèle de données de sortie.

Vous pouvez obtenir le modèle de données pour les données de sortie à l'aide de l'attribut :schema de la trame de données d'entrée :
inputSchema = inputData.schema
Les champs qui sont transmis inchangés peuvent être copiés du modèle de données d'entrée dans le modèle de données de sortie. Les champs qui sont nouveaux ou modifiés dans le modèle de données de sortie peuvent être créés à l'aide du constructeur StructField :
field = StructField(name, dataType, nullable=True, metadata=None)

Pour des informations sur le constructeur, consultez la documentation Spark.

Vous devez fournir au moins le nom de champ et son type de données. Vous pouvez éventuellement spécifier des métadonnées pour fournir une mesure, un rôle et une description pour la zone (voir Métadonnées de données).

Mode DataModelOnly

SPSS Modeler doit connaître le modèle de données de sortie d'un noeud avant son exécution pour permettre l'édition en aval. Pour obtenir le modèle de données de sortie pour un noeud Python/Spark, SPSS Modeler exécute le script dans un mode modèle de données uniquement spécial où aucune donnée n'est disponible. Le script peut identifier ce mode à l'aide de la méthode isComputeDataModelOnly sur l'objet de contexte Analytic Server.

Le script pour un noeud de transformation peut suivre ce modèle général :
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)

Génération d'un modèle

Un noeud qui génère un modèle doit renvoyer au contexte d'exécution du contenu qui décrit suffisamment le modèle pour que le noeud qui applique le modèle puisse le recréer exactement ultérieurement.

Le contenu du modèle est défini en termes de paires clé / valeur où la signification des clés et des valeurs est connue uniquement des noeuds de génération et de score et n'est pas interprétée par SPSS Modeler de quelque manière que ce soit. Le noeud peut éventuellement affecter un type MIME à une valeur avec l'intention que SPSS Modeler affiche les valeurs dont les types sont connus de l'utilisateur dans le nugget de modèle.

Une valeur dans ce contexte peut être PMML, HTML, une image, etc. Pour ajouter une valeur au contenu du modèle (dans le script de génération) :
asContext.setModelContentFromString(key, value, mimeType=None)
Pour extraire une valeur du contenu de modèle (dans le script de score) :
value = asContext.getModelContentToString(key)
En guise de raccourci, lorsqu'un modèle ou une partie d'un modèle est stocké dans un fichier ou un dossier du système de fichiers, vous pouvez regrouper tous les contenus stockés dans cet emplacement en un seul appel (dans le script de construction) :
asContext.setModelContentFromPath(key, path)

Notez que dans ce cas, il n'y a pas d'option pour spécifier un type MIME car le bundle peut contenir différents types de contenu.

Si vous avez besoin d'un emplacement temporaire pour stocker le contenu lors de la génération du modèle, vous pouvez obtenir un emplacement approprié à partir du contexte :
path = asContext.createTemporaryFolder()
Pour extraire le contenu existant dans un emplacement temporaire du système de fichiers (dans le script de score) :
path = asContext.getModelContentToPath(key)

Traitement des erreurs

Pour générer des erreurs, émettez une exception à partir du script et affichez-la pour l'utilisateur SPSS Modeler . Certaines exceptions sont prédéfinies dans le module spss.pyspark.exceptions. Par exemple :
from spss.pyspark.exceptions import ASContextException
if ... some error condition ...:
     raise ASContextException("message to display to user")
Recherche et réponse à l'IA générative
Ces réponses sont générées par un modèle de langue de grande taille dans watsonx.ai en fonction du contenu de la documentation du produit. En savoir plus