Scripts con Python para Spark
IBM® SPSS Modeler puede ejecutar scripts Python utilizando la infraestructura Apache Spark para procesar datos. Esta documentación proporciona la descripción de la API Python para las interfaces proporcionadas.
La instalación de IBM SPSS Modeler incluye una distribución Spark (por ejemplo, IBM SPSS Modeler 18.3 incluye Spark 2.4.6).
Requisitos previos
- Si tiene previsto ejecutar scripts Python/Spark en IBM SPSS Analytic Server, debe tener una conexión con el Analytic Server, y el Analytic Server debe tener acceso a una instalación compatible de Apache Spark. Consulte la documentación de IBM SPSS Analytic Server si desea detalles sobre cómo utilizar Apache Spark como el motor de ejecución.
- Si piensa ejecutar scripts Python/Spark para
IBM SPSS Modeler Server (o el servidor
local incluido con IBM SPSS Modeler Client,
que requiere Windows 64 o Mac64), ya no necesita instalar Python ni editar el archivo
options.cfg to para utilizar la instalación de Python. Ahora, a partir de la versión 18.1,
IBM SPSS Modeler incluye una distribución de Python.
Sin embargo, si requiere un determinado módulo que no está incluido con la distribución Python de IBM SPSS Modeler predeterminada, puede ir a <directorio_instalación_Modeler>/python e instalar paquetes adicionales.Aunque ahora se incluye una distribución de Python con IBM SPSS Modeler, si lo desea todavía puede hacer referencia a su propia instalación de Python como en releases anteriores, añadiendo la siguiente opción en el archivo options.cfg:
Ejemplo de Windows:# Establecer la vía de acceso completa en el ejecutable de python (incluyendo el nombre del ejecutable) para habilitar el uso de PySpark. eas_pyspark_python_path, ""
Ejemplo de Linux:eas_pyspark_python_path, "C:\\Your_Python_Install\\python.exe"
eas_pyspark_python_path, "/Your_Python_Install/bin/python"
Nota: Si apunta a su propia instalación de Python, debe ser de la versión 3.7.x. IBM SPSS Modeler se ha probado con Anaconda 3 y Python 3.7.6.
El objeto de contexto de IBM SPSS Analytic Server.
import spss.pyspark.runtime
asContext = spss.pyspark.runtime.getContext()
sparkContext =
asc.getSparkContext()
sqlContext = asc.getSparkSQLContext()
Consulte la documentación de Apache Spark si desea información sobre el contexto de Spark y el contexto de SQL.
Acceso a los datos
inputData = asContext.getSparkInputData()
asContext.setSparkOutputData(outputData)
outputData = sqlContext.createDataFrame(rdd)
Definición del modelo de datos
Un nodo que genera datos también debe definir un modelo de datos que describe los campos visibles en sentido descendente del nodo. En la terminología de Spark SQL, el modelo de datos es el esquema.
Un script Python/Spark define su modelo de datos de salida en
forma de un objeto pyspsark.sql.types.StructType
. Un
StructType
describe una fila en el marco de datos de
salida y se construye a partir de una lista de objetos
StructField
.
Cada StructField
describe un único campo en el
modelo de datos de salida.
:schema
del marco de
datos de entrada:inputSchema = inputData.schema
StructField
:field = StructField(name, dataType, nullable=True, metadata=None)
Consulte la documentación de Spark si desea información sobre el constructor.
Debe proporcionar al menos el nombre del campo y su tipo de datos. De forma opcional, puede especificar metadatos para proporcionar una medida, un rol y una descripción para el campo (consulte Metadatos de datos).
Modalidad DataModelOnly
IBM SPSS Modeler
necesita conocer el modelo de datos de salida para un nodo, antes de
que se ejecute el nodo, para poder habilitar la edición en sentido
descendente. Para obtener el modelo de datos de salida para un nodo
Python/Spark,
IBM SPSS Modeler
ejecuta el script en una modalidad especial de "solo modelo de
datos" donde no hay ningún dato disponible. El script puede
identificar esta modalidad utilizando el método
isComputeDataModelOnly
en el objeto de contexto
de Analytic Server.
if asContext.isComputeDataModelOnly():
inputSchema = asContext.getSparkInputSchema()
outputSchema = ... # construir el modelo de datos de salida
asContext.setSparkOutputSchema(outputSchema)
else:
inputData = asContext.getSparkInputData()
outputData = ... # construir el marco de datos de salida
asContext.setSparkOutputData(outputData)
Generación de un modelo
Un nodo que genera un modelo debe devolver al contexto de ejecución algo de contenido que describa el modelo de forma suficiente para que el nodo que aplica el modelo pueda recrearlo exactamente más tarde.
El contenido del modelo se define en términos de pares de clave/valor donde el significado de las claves y los valores se solo es conocido para los nodos de generación y puntuación y no es interpretado por el Modeler en modo alguno. De forma opcional, el nodo puede asignar un tipo MIME a un valor con la intención de que Modeler pueda mostrar estos valores que tienen tipos conocidos por el usuario en el nugget del modelo.
asContext.setModelContentFromString(key,
value, mimeType=None)
value = asContext.getModelContentToString(key)
asContext.setModelContentFromPath(clave,
vía de acceso)
Tenga en cuenta que en este caso no hay ninguna opción para especificar un tipo MIME porque el paquete puede contener distintos tipos de contenido.
path =
asContext.createTemporaryFolder()
path =
asContext.getModelContentToPath(clave)
Manejo de errores
spss.pyspark.exceptions
. Por ejemplo:from spss.pyspark.exceptions import
ASContextException
if ... some error condition ...:
raise ASContextException("mensaje para mostrar al usuario")