PMML,全稱預言模型標記語言(Predictive Model Markup Language),利用XML描述和存儲數據挖掘模型,是一個已經被W3C所接受的標准。PMML是一種基於XML的語言,用來定義預言模型。詳細的介紹可以參考:http://dmg.org/pmml/v4-3/GeneralStructure.html。
本文將介紹如何在Spark中導出PMML文件(Python語言)。
首先我們需要安裝jpmml-sparkml-package。具體的安裝細節可以參考:https://github.com/jpmml/jpmml-sparkml-package。
1.利用Git下載JPMML-SparkML-Package project
git init git clone https://github.com/jpmml/jpmml-sparkml-package.git cd jpmml-sparkml-package
如下圖所示:
2.生成uber-JAR文件
將Spark的Python路徑添加到環境變量
sudo gedit /etc/profile export PYTHONPATH=$PYTHONPATH:$SPARK_HOME/python source /etc/profile
再生成uber-JAR文件
mvn -Ppyspark -Dpython.exe=/usr/bin/python3.5 clean package
注意這里的python路徑要是你自己的系統里的Python路徑。耐心等待運行,運行結果如下:
這時jpmml-sparkml-package文件夾下會多出target文件夾,如下:
3.將上述的jpmml_sparkml-1.3rc0-py3.5.egg文件添加到Eclipse的Pydev的libraries中,如下圖:
並且將上述的兩個jar包復制到spark安裝目錄下的jars文件夾下。
這樣我們就完成了所有的環境配置。接下來我們進行測試:
首先,我們需要數據……數據文件test_data.csv截圖如下(部分):
完整的數據集可在http://archive.ics.uci.edu/ml/datasets/Wholesale+customers找到。
在Eclipse中新建test_PMML項目,如下圖:
其中test_pmml.py的python代碼如下:
1 from pyspark import SparkContext 2 from pyspark.sql import SparkSession 3 from pyspark.ml import Pipeline 4 from pyspark.ml.classification import LogisticRegression 5 from pyspark.ml.feature import RFormula 6 from jpmml_sparkml import toPMMLBytes 7 8 9 sc = SparkContext.getOrCreate() 10 spark = SparkSession.builder.appName("PMML Predict").config("spark.some.config.option", "some-value").getOrCreate() 11 print("Read file from /home/vagrant/......") 12 df = spark.read.csv("/home/vagrant/test_data.csv", header = True, inferSchema = True) 13 print("Reading complete.\n") 14 15 print("Processing logistic model......") 16 formula = RFormula(formula = "target ~ .") 17 logit = LogisticRegression() 18 pipeline = Pipeline(stages = [formula, logit]) 19 pipelineModel = pipeline.fit(df) 20 print("Modeling complete.\n") 21 22 print("Exporting pmml file......") 23 pmmlBytes = toPMMLBytes(sc, df, pipelineModel) 24 output_rdd = sc.parallelize([pmmlBytes]) 25 output_rdd.saveAsTextFile("pmml_Logit") 26 print("Export complete.\nThe end.")
運行結果如下:
同時會生成pmml_Logit文件夾,里面包含PMML文件part-00000,內容如下圖(部分):
這樣我們就成功地導出了邏輯回歸模型的PMML文件!本次分享就到這兒啦~~
參考文獻:
- PMML介紹:http://dmg.org/pmml/v4-3/GeneralStructure.html
- 測試數據集:http://archive.ics.uci.edu/ml/machine-learning-databases/00292/
- https://stackoverflow.com/questions/39888728/export-models-as-pmml-using-pyspark/39902676#39902676
- https://github.com/jpmml/jpmml-sparkml-package