Script com Python for Spark

SPSS Modeler pode executar scripts do Python usando a estrutura Apache Spark para processar dados. Esta documentação fornece a descrição da API do Python para as interfaces fornecidas.

A instalação do SPSS Modeler inclui uma distribuição Spark.

Acessar dados

Os dados são transferidos entre um script Python/Spark e o contexto de execução na forma de um Spark SQL DataFrame. Um script que consome dados (ou seja, qualquer nó, exceto um nó de importação) deve recuperar o quadro de dados do contexto:
inputData = asContext.getSparkInputData()
Um script que produz dados (ou seja, qualquer nó, exceto um nó terminal) deve retornar um quadro de dados para o contexto:
asContext.setSparkOutputData(outputData)
É possível usar o contexto SQL para criar um quadro de dados de saída de um RDD quando necessário:
outputData = sqlContext.createDataFrame(rdd)

Definindo o modelo de dados

Um nó que produz dados também deve definir um modelo de dados que descreve os campos visíveis de recebimento de dados do nó. Na terminologia do Spark SQL, o modelo de dados é o esquema.

Um script Python/Spark define seu modelo de dados de saída na forma de um objeto pyspsark.sql.types.StructType. Um StructType descreve uma linha no quadro de dados de saída e é construído a partir de uma lista de objetos StructField. Cada StructField descreve um único campo no modelo de dados de saída.

É possível obter o modelo de dados para os dados de entrada usando o atributo :schema do quadro de dados de entrada:
inputSchema = inputData.schema
Os campos que são passados inalterados podem ser copiados do modelo de dados de entrada para o modelo de dados de saída. Os campos que são novos ou modificados no modelo de dados de saída podem ser criados usando o construtor StructField:
field = StructField(name, dataType, nullable=True, metadata=None)

Consulte a documentação do Spark para obter informações sobre o construtor.

Deve-se fornecer pelo menos o nome do campo e seu tipo de dados. Opcionalmente, você pode especificar metadados para fornecer uma medida, função e descrição para o campo (veja Metadados de dados).

Modo DataModelOnly

SPSS Modeler precisa conhecer o modelo de dados de saída para um nó, antes que o nó seja executado, para ativar a edição downstream. Para obter o modelo de dados de saída para um nó Python/Spark, o SPSS Modeler executa o script em um modo especial somente modelo de dados em que não há dados disponíveis. O script pode identificar esse modo usando o método isComputeDataModelOnly no objeto de contexto do Analytic Server.

O script para um nó de transformação pode seguir este padrão geral:
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)

Construindo um modelo

Um nó que constrói um modelo deve retornar ao contexto de execução algum conteúdo que descreve o modelo suficientemente para que o nó que aplica o modelo possa recriá-lo exatamente em um momento posterior.

O conteúdo do modelo é definido em termos de pares chave / valor onde o significado das chaves e os valores são conhecidos apenas para nós de construção e pontuação e não é interpretado por SPSS Modeler de qualquer maneira. Opcionalmente o nó pode atribuir um tipo MIME a um valor com a intenção de que SPSS Modeler possa exibir aqueles valores que possuem tipos conhecidos para o usuário no nugget de modelo.

Um valor neste contexto pode ser PMML, HTML, uma imagem, etc. Para incluir um valor no conteúdo do modelo (no script de construção):
asContext.setModelContentFromString(key, value, mimeType=None)
Para recuperar um valor do conteúdo do modelo (no script de pontuação):
value = asContext.getModelContentToString(key)
Como um atalho, em que um modelo ou parte de um modelo é armazenado em um arquivo ou pasta no sistema de arquivos, é possível agrupar todo o conteúdo armazenado naquele local em uma chamada (no script de construção):
asContext.setModelContentFromPath(key, path)

Observe que, neste caso, não há opção para especificar um tipo MIME porque o pacote configurável pode conter vários tipos de conteúdo.

Se você precisa de um local temporário para armazenar o conteúdo durante a construção do modelo, é possível obter um local apropriado no contexto:
path = asContext.createTemporaryFolder()
Para recuperar o conteúdo existente em um local temporário no sistema de arquivos (no script de pontuação):
path = asContext.getModelContentToPath(key)

Manipulação de erros

Para levantar erros, jogue uma exceção do script e exiba-o para o usuário SPSS Modeler . Algumas exceções são predefinidas no módulo spss.pyspark.exceptions. Por exemplo:
from spss.pyspark.exceptions import ASContextException
if ... some error condition ...:
     raise ASContextException("message to display to user")