Istnieją dwa podejścia do eksportowania modeli Apache Spark do formatu danych PMML. Po pierwsze, pracując na poziomie abstrakcji Spark ML, można użyć biblioteki JPMML-SparkML. Po drugie, kiedy pracujesz na poziomie abstrakcji Spark MLlib, co wydaje się mieć tutaj miejsce, możesz użyć wbudowanej cechy PMMLExportable
.
JPMML-SparkML pobiera nazwy kolumn ze schematu danych Spark ML za pośrednictwem DataFrame#schema()
. Niestety, nie ma takiej opcji dla Spark MLlib, więc nazwy funkcji "field_ {n}" i nazwa etykiety "target" są po prostu fałszywymi, zakodowanymi nazwami.
Jest to dość proste, aby zmienić nazwę pola w dokumencie PMML pomocą JPMML-Model Biblioteka:
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");
Jeśli zebrać to PMML obiektu wystąpienie do pliku PMML, to widać, że pole „target” (i wszystkie jego odniesienia) zostało zmienione na "y". Powtórz procedurę z funkcjami.