5

我使用Spark 2.1.0。如何用Spark-MLlib PMML文件中的精確列名替換DataField值?

我一直在試圖將Spark-MLlib Linear Regression模型導出爲PMML文件。我也成功導出了PMML文件。但在該文件中,我看不到任何字段名稱。所有我能看到的是這樣的,

enter image description here

任何人都可以讓我知道什麼是這個原因?另外,請讓我知道如何獲得列名取代。

回答

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文件,然後就可以看到該字段「目標」(及其所有參考文獻)已重新命名爲「y」。使用功能重複該過程。