5

J'utilise Spark 2.1.0.Comment remplacer les valeurs DataField par les noms de colonnes exactes dans le fichier PMML de Spark-MLlib?

J'ai essayé d'exporter le modèle linéaire Spark-MLlib régression sous forme de fichier PMML. J'ai également exporté avec succès le fichier PMML. Mais dans ce fichier, je ne pouvais voir aucun nom de champ dedans. Tout ce que je peux voir est comme ça,

enter image description here

Quelqu'un peut-il me faire savoir quelle est la raison? Aussi, s'il vous plaît laissez-moi savoir comment obtenir les noms de colonnes à la place de cela.

Répondre

1

Il existe deux approches pour l'exportation des modèles Spark Apache au format de données PMML. Tout d'abord, lorsque vous travaillez au niveau d'abstraction de Spark ML, vous pouvez utiliser la bibliothèque JPMML-SparkML. Deuxièmement, lorsque vous travaillez au niveau d'abstraction Spark MLlib, ce qui semble être le cas ici, vous pouvez utiliser le trait PMMLExportable intégré.

JPMML-SparkML récupère les noms de colonnes à partir du schéma de données de Spark ML via DataFrame#schema(). Malheureusement, il n'existe pas d'option de ce type pour Spark MLlib, donc les noms de fonctions "field_ {n}" et le nom d'étiquette "target" sont simplement des noms codés en dur.

Il est assez facile de renommer des champs dans le document PMML en utilisant la bibliothèque JPMML-Model:

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"); 

Si vous, maréchal cette instance d'objet PMML dans un fichier PMML, vous pouvez voir que le champ « cible » (et toutes ses références) a été renommé en "y". Répétez la procédure avec les fonctionnalités.