我使用Spark 2.1.0。
我一直试图将Spark-MLlib线性回归模型导出为PMML文件。我也成功导出了PMML文件。但在该文件中,我无法在其中看到任何字段名称。我能看到的就是这样,
任何人都可以让我知道原因是什么?另外,请告诉我如何获取列名称。
答案 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”。使用功能重复此过程。