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

时间:2017-05-28 17:15:14

标签: apache-spark machine-learning linear-regression apache-spark-mllib pmml

我使用Spark 2.1.0。

我一直试图将Spark-MLlib线性回归模型导出为PMML文件。我也成功导出了PMML文件。但在该文件中,我无法在其中看到任何字段名称。我能看到的就是这样,

enter image description here

任何人都可以让我知道原因是什么?另外,请告诉我如何获取列名称。

1 个答案:

答案 0 :(得分: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”。使用功能重复此过程。