如何使用Spark-MLlib PMML文件中的精确列名替换DataField值?

Ram*_*mar 5 machine-learning linear-regression pmml apache-spark apache-spark-mllib

我使用Spark 2.1.0.

我一直在尝试将Spark-MLlib线性回归模型导出为PMML文件.我也成功导出了PMML文件.但在该文件中,我看不到任何字段名称.我只能看到这样的,

在此输入图像描述

任何人都可以让我知道这是什么原因?另外,请告诉我如何获取列名来代替.

use*_*924 1

有两种方法可以将 Apache Spark 模型导出为 PMML 数据格式。首先,在 Spark ML 抽象级别工作时,您可以使用JPMML-SparkML库。其次,当在 Spark MLlib 抽象级别工作时(这里似乎是这种情况),那么您可以使用内置的PMMLExportable特征。

JPMML-SparkML 通过以下方式从 Spark ML 数据模式中检索列名称DataFrame#schema()。不幸的是,Spark MLlib 没有这样的选项,因此功能名称“field_{n}”和标签名称“target”只是虚拟的硬编码名称。

使用JPMML-Model库重命名 PMML 文档中的字段相当容易:

pmmlExportable.toPMML("/tmp/raw-pmml-file")
org.dmg.pmml.PMML pmml = org.jpmml.model.JAXBUtil.unmarshal("/tmp/raw-pmml-file");
org.jpmml.model.visitors.FieldRenamer targetRenamer = new FieldRenamer(FieldName.create("target"), FieldRenamer.create("y"));
targetRenamer.applyTo(pmml);
org.jpmml.model.JAXBUtil.marshal(pmml, "/tmp/final-pmml-file");
Run Code Online (Sandbox Code Playgroud)

如果将此 PMML 对象实例编组到 PMML 文件,那么您可以看到字段“target”(及其所有引用)已重命名为“y”。对特征重复该过程。