【问题标题】:How to replace the DataField values with exact column names in Spark-MLlib PMML file?如何用 Spark-MLlib PMML 文件中的确切列名替换 DataField 值?
【发布时间】:2017-10-29 00:35:26
【问题描述】:
我使用 Spark 2.1.0。
我一直在尝试将 Spark-MLlib 线性回归模型导出为 PMML 文件。我还成功导出了 PMML 文件。但是在那个文件中,我看不到任何字段名称。我能看到的都是这样的,
谁能告诉我这是什么原因?另外,请告诉我如何获取列名来代替它。
【问题讨论】:
标签:
apache-spark
machine-learning
linear-regression
apache-spark-mllib
pmml
【解决方案1】:
有两种方法可以将 Apache Spark 模型导出为 PMML 数据格式。首先,在 Spark ML 抽象级别工作时,您可以使用 JPMML-SparkML 库。其次,当在 Spark MLlib 抽象级别工作时,这里似乎就是这种情况,那么您可以使用内置的 PMMLExportable 特征。
JPMML-SparkML 通过DataFrame#schema() 从 Spark ML 数据架构中检索列名。不幸的是,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");
如果将此 PMML 对象实例编组为 PMML 文件,则可以看到字段“target”(及其所有引用)已重命名为“y”。对特征重复该过程。