SPSS Modeler 可以使用 Apache Spark 框架运行 Python 脚本来处理数据。 本文档提供可用接口的 Python API 描述。
SPSS Modeler 安装包含 Spark 分发版。
访问数据
inputData = asContext.getSparkInputData()
asContext.setSparkOutputData(outputData)
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 可能会在模型块中向用户显示具有已知类型的那些值。
asContext.setModelContentFromString(key, value, mimeType=None)
value = asContext.getModelContentToString(key)
asContext.setModelContentFromPath(key, path)
请注意,在这种情况下,没有指定 MIME 类型的选项,因为该捆绑包可以包含各种内容类型。
path = asContext.createTemporaryFolder()
path = asContext.getModelContentToPath(key)
错误处理
spss.pyspark.exceptions
模块中进行预定义。 例如:from spss.pyspark.exceptions import ASContextException
if ... some error condition ...:
raise ASContextException("message to display to user")