0 / 0
Go back to the English version of the documentation
使用 Python for Spark 进行脚本编制
Last updated: 2024年10月07日
使用 Python for Spark (SPSS Modeler) 进行脚本编制

SPSS Modeler 可以使用 Apache Spark 框架运行 Python 脚本来处理数据。 本文档提供可用接口的 Python API 描述。

SPSS Modeler 安装包含 Spark 分发版。

访问数据

数据会以 Spark SQL DataFrame 的形式,在 Python/Spark 脚本与执行上下文之间传输。 使用数据的脚本(即,除“导入”节点之外的任何节点)必须从上下文检索数据帧:
inputData = asContext.getSparkInputData()
生成数据的脚本(即,除终端节点之外的任何节点)必须返回数据框给上下文:
asContext.setSparkOutputData(outputData)
如有需要,可以使用 SQL 上下文从 RDD 创建输出数据帧:
outputData = sqlContext.createDataFrame(rdd)

定义数据模型

生成数据的节点还必须定义数据模型,以描述在该节点的下游可见的字段。 在 Spark SQL 术语中,将该数据模型称为“模式”。

Python/Spark 脚本会以 pyspsark.sql.types.StructType 对象的形式定义其输出数据模型。 StructType 用于描述输出数据帧中的一行,而且是根据一列 StructField 对象来构造。 每个 StructField 都描述输出数据模型中的单个字段。

您可使用输入数据帧的 :schema 属性来获取输入数据的数据模型:
inputSchema = inputData.schema
按原样传递的字段可以从输入数据模型复制到输出数据模型。 在输出数据模型中新增或修改的字段可以使用 StructField 构造函数来创建:
field = StructField(name, dataType, nullable=True, metadata=None)

有关该构造函数的信息,请参阅 Spark 文档。

必须至少提供字段名称及其数据类型。 (可选) 您可以指定元数据以提供字段的度量,角色和描述 (请参阅 数据元数据)。

DataModelOnly 方式

SPSS Modeler 需要在节点运行之前了解节点的输出数据模型,以启用下游编辑。 为了获取 Python/Spark 节点的输出数据模型, SPSS Modeler 以没有可用数据的特殊 仅数据模型 方式运行脚本。 该脚本可以使用 Analytic Server 上下文对象上的 isComputeDataModelOnly 方法来识别此方式。

变换节点的脚本可以采用以下一般模式:
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 和图像等。 要将值添加到模型内容(在构建脚本中):
asContext.setModelContentFromString(key, value, mimeType=None)
要从模型内容中检索值(在评分脚本中):
value = asContext.getModelContentToString(key)
作为一种快捷方法,如果要将模型或模型某部分存储到文件系统中的文件或文件夹,您可以在构建脚本中的一个调用中,将所有存储至该位置的内容捆绑在一起:
asContext.setModelContentFromPath(key, path)

请注意,在这种情况下,没有指定 MIME 类型的选项,因为该捆绑包可以包含各种内容类型。

如果构建模型时需要临时位置来存储内容,可以从上下文获取适当的位置:
path = asContext.createTemporaryFolder()
要将现有内容检索到文件系统中的临时位置(在评分脚本中):
path = asContext.getModelContentToPath(key)

错误处理

要引发错误,请从脚本抛出异常,并将其显示给 SPSS Modeler 用户。 某些异常已在 spss.pyspark.exceptions 模块中进行预定义。 例如:
from spss.pyspark.exceptions import ASContextException
if ... some error condition ...:
     raise ASContextException("message to display to user")
Generative AI search and answer
These answers are generated by a large language model in watsonx.ai based on content from the product documentation. Learn more